Apache spark Spark中的SequenceFile分区

Apache spark Spark中的SequenceFile分区,apache-spark,Apache Spark,我想了解Spark分区是如何实现的,所以我做了以下工作: JavaPairRDD<Text, CustomObj> bigRDD = ctx.sequenceFile("path to sequenceFile", Text.class, CustomObj.class); System.out.println(bigRDD.partitions().size()); javapairdd bigRDD=ctx.sequenceFile(“sequenceFile的

我想了解Spark分区是如何实现的,所以我做了以下工作:

JavaPairRDD<Text, CustomObj> bigRDD = ctx.sequenceFile("path to sequenceFile", Text.class, CustomObj.class);
        System.out.println(bigRDD.partitions().size());
javapairdd bigRDD=ctx.sequenceFile(“sequenceFile的路径”,Text.class,CustomObj.class);
System.out.println(bigRDD.partitions().size());
假设“序列文件路径”包含8个不同的序列文件,其总大小为21MB。输出的分区数为8

JavaPairRDD<String, String> bigRDD1 = ctx.wholeTextFiles("path to image file");
        System.out.println(bigRDD1.partitions().size());
javapairdd bigRDD1=ctx.wholeTextFiles(“图像文件路径”);
System.out.println(bigRDD1.partitions().size());
在本例中,“图像文件路径”包含200多个图像文件,总大小为91 MB。它显示了总共2个分区

JavaPairRDD<String, String> bigRDD1 = ctx.wholeTextFiles("path to image file");
        System.out.println(bigRDD1.partitions().size());
我使用Spark作为本地模式(setMaster[“local”]),据我所知,分区数=总文件大小/hdfs默认块大小(这里是32MB)。所以我认为第二个结果在理论上是正确的

但是在第一种情况下,我不明白为什么它总共有8个分区,甚至总文件大小只有21MB

已更新

案例1中的序列文件是通过以下方式在不同作业中创建的:

    JavaPairRDD<Text, CustomObj> setsPartitions = clusteSet.partitionBy(new HashPartitioner(8));
   setsPartitions.saveAsHadoopFile("path to out put", Text.class, CustomObj.class, MultipleSequenceFileOutputFormat.class);
javapairdd setsPartitions=clusteSet.partitionBy(新的HashPartitioner(8));
setsPartitions.saveAsHadoopFile(“输出路径”、Text.class、CustomObj.class、MultipleSequenceFileOutputFormat.class);

因为在我的例子中,我知道之前的分区数,所以我将其设置为8

,因为在本地模式下,默认并行度设置为可用内核数。@zero323是正确的。只是想补充一点,您看到bigRDD1的2个分区的原因是因为wholeTextFiles方法使用了扩展了
CombineFileInputFormat
WholeTextFileInputFormat
(它又根据节点位置组合输入拆分)。由于您是在本地运行的,因此这可能被合并为一个拆分;但是,默认的最小分区数是2,这就是您看到的。@zero323我只为我的实例VM设置了1个CPU。如果我在案例1中删除4个文件,那么输出将是4。你能解释一下吗?@RohanAletty你能帮我吗?@ndk076你的序列文件是以不可拆分的格式压缩的吗(例如gzip)?