阅读时如何在火花中发生初始分区?

How initial partitions happens in spark while reading?

读取大型 csv 文件时,初始 partitions 数据在 spark 中发生的基础是什么?

如何决定在读取大 csv 文件时将 partitions/split 大文件数据放入不同的工作节点?

谁能分享一下,怎么做的?

当使用 spark-sql 读取 non-bucketed 个 HDFS 文件(例如 parquet)时,DataFrame 分区的数量 df.rdd.getNumPartitions 取决于这些因素:

spark.default.parallelism (roughly translates to #cores available for the application)
spark.sql.files.maxPartitionBytes (default 128MB)
spark.sql.files.openCostInBytes (default 4MB)
spark.sql.files.minPartitionNum (optional, introduced in spark 3.1)

分区数量粗略估计为:

PartitionSize ≈ min(maxPartitionBytes, max(4MB, TotalDataSize/#cores))
NumberOfPartitions ≈ max(TotalDataSize/PartitionSize, minPartitionNum)

具体计算可参考FilePartition