我想了解Spark分区的方式,所以我做了以下操作:
JavaPairRDD<Text, CustomObj> bigRDD = ctx.sequenceFile("path to sequenceFile", Text.class, CustomObj.class);
System.out.println(bigRDD.partitions().size());
假设“sequenceFile的路径”包含8个不同的序列文件,总共21 MB。输出给出8作为分区数。
JavaPairRDD<String, String> bigRDD1 = ctx.wholeTextFiles("path to image file");
System.out.println(bigRDD1.partitions().size());
在这种情况下,“图像文件路径”包含200多个图像文件,总大小为91 MB。它显示了2个分区。
我使用Spark作为本地模式(setMaster [“local”]),据我所知,分区数=总文件大小/ hdfs默认块大小(此处为32MB)。所以我认为第二个结果是正确的理论。
但在第一种情况下,我不明白为什么它总共有8个分区,即使总文件大小只有21 MB。?
已更新
案例1中的序列文件已在不同的作业中创建:
JavaPairRDD<Text, CustomObj> setsPartitions = clusteSet.partitionBy(new HashPartitioner(8));
setsPartitions.saveAsHadoopFile("path to out put", Text.class, CustomObj.class, MultipleSequenceFileOutputFormat.class);
在我的情况下,我知道之前的分区数,所以我把它设置为等于8