读取Parquet Hive表时,哪些因素决定了Spark分区的数量?

时间:2018-07-12 15:01:03

标签: apache-spark hive hdfs parquet orc

我在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。

总结:

  1. ORC表-18个文件,37.5 GB,87个HDFS块,305个Spark分区。
  2. 镶木表-15个文件,33.5 GB,139个HDFS块,28个Spark分区。

所以,我的问题是:在每种情况下,什么设置控制着Spark分区的数量?他们为什么如此不同?

0 个答案:

没有答案