我有一個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個分區 –