我在Parquet中存储了一个Hive表(未压缩,出于测试目的)。该表基本上是通过以下查询创建的:
CREATE TABLE myschema.table_uncompressed_parquet
STORED AS PARQUET
TBLPROPERTIES('parquet.compression'='UNCOMPRESSED')
AS
SELECT * FROM myschema.source;
运行hdfs dfs -count /path/to/table/
显示该表包含18个文件,总大小为37.5 GB。运行hdfs fsck /path/to/table/
显示该表包含87个HDFS块(平均块大小为460 MB)。这18个文件的大小大致相同-一个文件为680 MB,其余文件为2 GB至2.4 GB。
现在,我将此表加载到Spark(pyspark)中并运行:
spark.table('myschema.table_uncompressed_parquet').rdd.getNumPartitions()
这表明Spark DataFrame具有305个分区。
如果我使用未压缩的ORC文件而不是未压缩的Parquet文件执行所有相同的操作,则磁盘上的统计信息非常相似,但Spark分区的数量要少得多,为28。
总结:
所以,我的问题是:在每种情况下,什么设置控制着Spark分区的数量?他们为什么如此不同?