如何在Apache Spark中拆分输入文件

时间:2014-12-23 11:14:21

标签: apache-spark

假设我有一个大小为100MB的输入文件。它包含CSV格式的大量点(lat-long对)。如何将输入文件拆分为Apache Spark中的10个10MB文件,或者如何自定义拆分。

注意:我想处理每个映射器中的一个点的子集。

2 个答案:

答案 0 :(得分:4)

Spark的抽象不提供明确的数据拆分。但是,您可以通过多种方式控制并行性。

假设您使用YARN,HDFS文件会自动拆分为HDFS块,并且在Spark操作运行时会同时处理它们。

除HDFS并行性外,请考虑使用具有PairRDD的分区器。 PairRDD是键值对的RDD的数据类型,分区器管理从键到分区的映射。默认分区程序读取spark.default.parallelism。分区器有助于在PairRDD特定的操作(例如reduceByKey)中控制数据的分布及其位置。

请查看以下有关Spark数据并行性的文档。

http://spark.apache.org/docs/1.2.0/tuning.html

答案 1 :(得分:1)

在搜索Spark API之后,我找到了一个方法 partition ,它返回了JavaRDD的分区数。在JavaRDD创建时,我们已经按照@Nick Chammas的说法将其重新划分为所需数量的分区。

JavaRDD<String> lines = ctx.textFile("/home/hduser/Spark_programs/file.txt").repartition(5);
List<Partition> partitions = lines.partitions();
System.out.println(partitions.size());