我有一个HDFS文件夹和两个250MB地板文件。 hadoop df块大小设置为128MB。 有以下代码:火花地板数据帧分区数
JavaSparkContext sparkContext = new JavaSparkContext();
SQLContext sqlContext = new SQLContext(sparkContext);
DataFrame dataFrame = sqlContext.read().parquet("hdfs:////user/test/parquet-folder");
LOGGER.info("Nr. of rdd partitions: {}", dataFrame.rdd().getNumPartitions());
sparkContext.close();
我与spark.executor.instances = 3和spark.executor.cores = 4在集群上运行它。我可以看到,实木复合地板的文件的读取3个执行人X 4个核= 12次的任务中拆分:
spark.SparkContext: Starting job: parquet at VerySimpleJob.java:25
scheduler.DAGScheduler: Got job 0 (parquet at VerySimpleJob.java:25) with 12 output partitions
然而,当我得到的数据框RDD(或创建RDD与toJavaRDD())调用,我只获得4个分区。这是由hdfs块大小控制 - 每个文件2个块,因此4个分区?
为什么这不匹配parquet(parent?)操作的分区数?
回答如下,但总的来说你是对的 - 这都是关于HDFS块的大小。 – Zyoma
基于@Zyoma的建议,我已经更新了代码,试图强制更小的分割,从而为数据框提供更多的输入分区。以下配置已更改:** parquet.block.size,mapred.max.split.size,mapred.min.split.size全部设置为Long.toString(8 * 1024 * 1024L)**。这*仍然*给我回4个分区 –