小文件会分散在JavaPairRDD中的分区上吗?

时间:2019-02-24 13:19:07

标签: apache-spark apache-spark-sql rdd apache-spark-dataset

这可能是一个愚蠢的问题,但是我无法理解如何在分区之间分割文件。 我的要求是从Hdfs位置读取10000个二进制文件(Bloom过滤器持久化文件),然后通过将数据转换为ByteArrayInputStream来分别处理二进制文件。需要注意的一点是,这些文件是Bloom过滤器持久性文件,应从文件开头到结尾顺序读取,并应将其转换为Byte Array,因此该Byte数组将用于重组Bloomfilter对象。 / p>

JavaPairRDD<String, PortableDataStream> rdd = sparkContext.binaryFiles(commaSeparatedfilePaths);

rdd.map(new Function<Tuple2<String, PortableDataStream>, BloomCheckResponse>()

在代码中,我将v1._1作为Filepath,将v1._2作为PortableDataStream,它将被转换为ByteArrayInputStream。 每个二进制文件为34 MB。 现在的问题是,是否会出现文件的一部分位于一个分区而另一部分位于另一个分区的情况?还是在我处理的所有时间中,我是否会将文件的所有内容映射到单个分区中的文件中,而不拆分? 执行程序内存= 4GB,内核= 2,执行程序为180。 基本上,人们期望应该从头到尾读取文件而不会拆分。

1 个答案:

答案 0 :(得分:0)

保证每个(file, stream)都提供filestream的全部内容。在任何情况下都不会在多个对之间划分数据,更不用说多个分区了。

您可以安全地将其用于预期的情况。