即使它是一个配置单元表或hdfs文件,当spark读取数据并创建一个Dataframe时,我认为rdd/dataframe中的分区数将等于hdfs中partfiles的数目。但是当我用hiveexternaltable做一个测试时,我发现这个数字和part文件的数字不一样,Dataframe中的分区数是119。该表是一个配置单元分区表,其中包含150个部件文件,最小文件大小为30 mb,最大文件大小为118 mb。那么是什么决定了分区的数量呢?
即使它是一个配置单元表或hdfs文件,当spark读取数据并创建一个Dataframe时,我认为rdd/dataframe中的分区数将等于hdfs中partfiles的数目。但是当我用hiveexternaltable做一个测试时,我发现这个数字和part文件的数字不一样,Dataframe中的分区数是119。该表是一个配置单元分区表,其中包含150个部件文件,最小文件大小为30 mb,最大文件大小为118 mb。那么是什么决定了分区的数量呢?
3条答案
按热度按时间x4shl7ld1#
我想这个链接确实回答了我的问题,分区的数量取决于拆分的数量,拆分的数量取决于hadoop的inputformat。https://intellipaat.com/community/7671/how-does-spark-partition-ing-work-on-files-in-hdfs
qybjjes12#
您可以通过设置
spark.sql.files.maxPartitionBytes
. 默认值为128 mb,请参阅spark tuning。mrfwxfqh3#
每个块的块大小为128mb。spark将读取数据。假设您的配置单元表大小约为14.8gb,那么它将把配置单元表数据划分为128mb块,并将产生119个分区。
另一方面,配置单元表是分区的,因此分区列有150个唯一值。
所以配置单元中的部件文件数和spark中的分区数没有链接。