读取时 Spark 中的初始分区是如何发生的?

Oxa*_*rey 1 distributed-computing apache-spark

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

从大 csv 文件读取时,它将如何决定将大文件数据的分区数量/拆分到不同的工作节点中?

谁能分享一下,它是如何完成的?

War*_*Zhu 6

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

\n
spark.default.parallelism (roughly translates to #cores available for the application)\nspark.sql.files.maxPartitionBytes (default 128MB)\nspark.sql.files.openCostInBytes (default 4MB)\nspark.sql.files.minPartitionNum (optional, introduced in spark 3.1)\n
Run Code Online (Sandbox Code Playgroud)\n

分区数量的粗略估计是:

\n
PartitionSize \xe2\x89\x88 min(maxPartitionBytes, max(4MB, TotalDataSize/#cores))\nNumberOfPartitions \xe2\x89\x88 max(TotalDataSize/PartitionSize, minPartitionNum)\n
Run Code Online (Sandbox Code Playgroud)\n

具体计算可以参考FilePartition 。

\n