【问题标题】:Select number of Partitions on basis of size of File Read by Spark根据 Spark 读取的文件大小选择分区数
【发布时间】:2020-07-08 20:56:59
【问题描述】:

我有一个用例,有时我收到 400GB 数据,有时收到 1MB 数据。我已将分区数设置为硬编码值,比如说 300。当我收到 1MB 时,脚本会生成 300 个非常小的分区。我想避免这种情况,我想以某种方式根据大小对数据框进行分区。假设我想让每个分区的大小为 2GB。

【问题讨论】:

  • 查看这篇文章 - stackoverflow.com/questions/61338374/… 如果没有帮助请告诉我..:)
  • 是的,这是通过计算数据框的大小和定义的范围来解决我的问题,如果大小为 m,则创建 n 个分区。谢谢
  • 有什么直接的方法吗?像 Spark 内置功能一样?
  • 它的 spark 内置功能只是我们必须根据需要进行自定义。你使用什么输出格式?
  • 我使用的是拼花格式

标签: apache-spark pyspark


【解决方案1】:

使用-

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

获取输入大小。然后您可以将其转换为 GB 并通过将其划分为单个分区大小(如 2 GB)来计算分区数

请参考我的答案以获得其他方法来获取输入大小 - https://stackoverflow.com/a/62463009/4758823

【讨论】:

  • AttributeError: 'SparkSession' 对象没有属性 'sessionState'
  • spark.sessionState... 上面的行是用于 scala 和 pyspark 版本的,您可能需要使用它 - spark._jsparkSession.sessionState().executePlan(df._jdf.queryExecution().logical()).optimizedPlan().stats().sizeInBytes() 并查看 spark 版本.. 这对于所有 spark 版本可能不一样..
  • 是的,这对我有用,谢谢 Srinivas 和 Someshwar Kale
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 2020-09-02
  • 2018-11-27
  • 2018-09-25
  • 1970-01-01
  • 2020-03-21
相关资源
最近更新 更多