在Spark 2.2.0中:我正在阅读一个文件
spark.csv.read("filepath").load().rdd.getNumPartitions
在一个系统中,一个350 MB的文件有77个分区,在另一个系统中有88个分区。对于一个28 GB的文件,我还得到了226个分区,大约是28*1024 MB/128 MB。问题是,Spark CSV数据源如何确定这个默认的分区数量?
在Spark 2.2.0中:我正在阅读一个文件
spark.csv.read("filepath").load().rdd.getNumPartitions
在一个系统中,一个350 MB的文件有77个分区,在另一个系统中有88个分区。对于一个28 GB的文件,我还得到了226个分区,大约是28*1024 MB/128 MB。问题是,Spark CSV数据源如何确定这个默认的分区数量?
4条答案
按热度按时间aurhwmvo1#
分区的数量受多种因素的影响-通常
spark.default.parallelism
spark.default.parallelism
的群集管理器/内核数量(请参见spark configuration)从文本文件(以及CSV)阅读时的分区数应根据CSVDataSource确定为
math.min(defaultParallelism, 2)
um6iljoc2#
当阅读csv文件(单个大文件或多个小文件,压缩或未压缩)时,我发现
spark.sql.files.maxPartitionBytes
对结果分区的数量有很大的影响。调整这个值(默认值为128MB,请参阅https://spark.apache.org/docs/latest/sql-performance-tuning.html)对我来说很关键。aiazj4mn3#
从任何文件阅读时的分区数遵循以下公式。
step1:找到文件大小/文件夹大小从指定的路径,我在本地测试.你可以找到根据您的要求(无论是s3/hdfs).
步骤2:应用公式
我们可以申请大数据/小数据来获得分区数。
bttbmeg04#
根据我的经验,这取决于spark.default.parallelism
**场景一:**文件大小:75MB默认并行度:8
场景:2文件大小:75MB默认并行度:10
场景三文件大小:75MB默认并行度:4
**场景四:**文件大小:75MB默认并行度:100
基于此,我推断,初始数量取决于spark.default.parallelism的值。
如果spark.default.parallelism设置为更高的数字,它只会根据哈希创建可能数量的分区。