如何计算 Spark 中数据帧的大小(以字节为单位)?

2024-01-25

我想编写一个带有重新分区的大型数据帧,因此我想计算源数据帧的重新分区数。

numberofpartition = {size of dataframe/default_blocksize}

如何计算数据帧大小(以字节为单位)?


Usingspark.sessionState.executePlan(df.queryExecution.logical).optimizedPlan.stats(spark.sessionState.conf).sizeInBytes一旦数据帧加载到内存中,我们就可以获得实际数据帧的大小。检查下面的代码。

scala> val df = spark.read.format("orc").load("/tmp/srinivas/")
df: org.apache.spark.sql.DataFrame = [channelGrouping: string, clientId: string ... 75 more fields]

scala> import org.apache.commons.io.FileUtils
import org.apache.commons.io.FileUtils

scala> val bytes = spark.sessionState.executePlan(df.queryExecution.logical).optimizedPlan.stats(spark.sessionState.conf).sizeInBytes
bytes: BigInt = 763275709

scala> FileUtils.byteCountToDisplaySize(bytes.toLong)
res5: String = 727 MB

scala> import sys.process._
import sys.process._

scala> "hdfs dfs -ls -h /tmp/srinivas/".!
Found 2 items
-rw-r-----   3 svcmxns hdfs          0 2020-04-20 01:46 /tmp/srinivas/_SUCCESS
-rw-r-----   3 svcmxns hdfs    727.4 M 2020-04-20 01:46 /tmp/srinivas/part-00000-9d0b72ea-f617-4092-ae27-d36400c17917-c000.snappy.orc
res6: Int = 0
val bytes = spark.sessionState.executePlan(df.queryExecution.logical).optimizedPlan.stats(spark.sessionState.conf).sizeInBytes
    val dataSize = bytes.toLong
    val numPartitions = (bytes.toLong./(1024.0)./(1024.0)./(10240)).ceil.toInt // May be you can change or modify this to get required partitions.

    df.repartition(if(numPartitions == 0) 1 else numPartitions)
      .[...]

Edit - 1:请根据您的 Spark 版本使用以下逻辑。

火花2.4

val bytes = spark.sessionState.executePlan(df.queryExecution.logical).optimizedPlan.stats(spark.sessionState.conf).sizeInBytes

火花2.3

val bytes = spark.sessionState.executePlan(df.queryExecution.logical).optimizedPlan.stats.sizeInBytes

PySpark

spark._jsparkSession.sessionState().executePlan(df._jdf.queryExecution().logical()).optimizedPlan().stats().sizeInBytes()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何计算 Spark 中数据帧的大小(以字节为单位)? 的相关文章

随机推荐

  • Laravel-mix Webpack 公共路径

    所以我使用 Laravel Mix 并在 Webpack 中设置了代码分割 我正在为我的 Vue 组件使用动态导入 如下所示 Vue component UserMenu gt import components UserMenu vue
  • 将参数从 udev 规则文件传递给 shell 脚本

    在规则文件中 通过传递参数 LABEL 和 DEVNAME 来执行脚本以进行安装 ACTION add RUN appmount scripts usb mount sh E ID FS LABEL E DEVNAME 在 usb moun
  • 表单在 while 循环期间冻结

    我有一段代码可以检查某个应用程序是否正在运行 while Process GetProcessesByName notepad Length 0 System Threading Thread Sleep 1000 它将检查用户是否正在运行
  • 为什么Intellij IDEA不显示

    Windows 8 设置中的所有内容均设置为UTF 8 例如 Intellij IDEA 显示中文字符 这意味着它确实设置为 Unicode 字符集 但它显示一个框而不是 MATHEMATICAL FRAKTUR CAPITAL G 符号
  • Makefile 通用模式规则——来自 xyzzy.ext0 的 xyzzy-en_US.ext2

    我无法找到一种方法来使用 make 为以下类型的生产定义通用模式规则 require xyzzy en US ext2 from xyzzy ext0 via xyzzy ext1 这有效 all xyzzy en US ext2 to b
  • 检查数据表是否为空

    下面的代码是我用来从 sql 数据库检索用户信息的代码 string userName LoginUser UserName string password LoginUser Password string comm SELECT Use
  • 通过调试或发布过滤 androidDependency

    我的应用程序的依赖关系尽可能简单 我只是implement支持库 现在我想知道我的应用程序中的依赖关系 dependencies implementation fileTree dir libs include jar implementa
  • 异常代码:KERN_PROTECTION_FAILURE 位于 0x00000000 错误

    Exception Type EXC BAD ACCESS SIGBUS Exception Codes KERN PROTECTION FAILURE at 0x00000000 什么是内核保护错误 在哪里可以清楚地找到有关异常类型和代码
  • RichEdit 中拦截 TAB 键

    这里有很多类似的问题 但我找不到我的问题的答案 I have a TRichEdit and want to implement some custom behaviour when the user presses Tab I set t
  • jQuery UI 自动完成,没有结果时显示一些内容

    我有以下代码 Autocomplete search shop search autocomplete source minLength 1 select function event ui append place ui item nam
  • Android 通知 .addAction 在 api 23 中已弃用

    在通知中添加操作的正确方法是什么API 23 since addAction int icon CharSequence title PendingIntent intent 已弃用 找不到例子 谢谢 我的旧动作 addAction R d
  • 管理游戏中的碰撞检测

    所以我的问题不是关于如何进行碰撞检测 而是更广泛的 哪些代码应该拥有碰撞检测 我过去写过一些游戏 相对简单的 2D Flash 游戏 这让我想到哪些代码应该拥有碰撞检测 让我澄清一下 假设在游戏中我有一群敌人和玩家发射的一组射弹 所以在过去
  • 在列表视图中显示单列并包含两组

    我有客户表 其中有列 customer id customer name 我有另一个表称为地址 地址ID 地址文本 现在我想像这样显示客户姓名和地址文本 customers customer name 1 custom
  • 如何确定控件的可见性?

    我有一个TabControl http msdn microsoft com en us library system windows forms tabcontrol aspx其中包含多个选项卡 每个选项卡都有一个UserControl
  • SameSite 属性破坏 SAML 流程

    Chrome 80 将引入一个新属性 SameSite 严格 仅附加 同一站点 请求的 cookie Lax 使用安全的 HTTP 方法 例如 发送 同一站点 请求的 cookie 以及 跨站点 顶级导航 获取头部选项跟踪 无 为所有 同一
  • Java 中的过早优化:何时使用“x = foo.getX()”与简单的“foo.getX()”

    当我发现自己多次调用同一个 getter 方法时 这应该被视为一个问题吗 始终 分配给局部变量并仅调用一次是否更好 我确信答案当然是 视情况而定 我更关心更简单的情况 其中 getter 只是 传递私有变量的值 类型方法 即不涉及昂贵的计算
  • 设置 WHERE 条件以在 ExecuteSqlCommand() 中使用 Ids.Contains()

    我正在使用实体框架 并且想要执行批量更新 加载每一行 更新这些行 然后将它们保存回数据库的效率太低了 所以我更喜欢使用DbContext Database ExecuteSqlCommand 但是 如何使用此方法来更新 ID 列表中包含的
  • .NET 线程与操作系统线程不同吗? [复制]

    这个问题在这里已经有答案了 NET 线程是轻量级用户模式线程还是内核模式操作系统线程 另外 不考虑 SQL Server NET 线程和操作系统线程之间是否存在一一对应的关系 我也很感兴趣 因为Thread具有一对名为的对称方法的类Begi
  • TypeScript:找不到名称 async/await

    我在用着typescript next我想将我的代码编译为es5 但每次我使用async or await关键字编译器错误并显示该消息 Cannot find name await 这是我的嘴唇 dom es2015 es2016 es20
  • 如何计算 Spark 中数据帧的大小(以字节为单位)?

    我想编写一个带有重新分区的大型数据帧 因此我想计算源数据帧的重新分区数 numberofpartition size of dataframe default blocksize 如何计算数据帧大小 以字节为单位 Usingspark se