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

Cha*_*dan 4 apache-spark

假设我有一个大小为 100MB 的输入文件。它包含 CSV 格式的大量点(经纬度对)。我应该怎么做才能在 Apache Spark 中将输入文件拆分为 10 个 10MB 文件,或者如何自定义拆分。

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

suz*_*omo 5

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

  • Suztomo - [`textFile()`](http://spark.apache.org/docs/latest/api/python/pyspark.html#pyspark.SparkContext.textFile) 上还有 `minPartitions` 参数,它给出了一些控制将文件加载到多少个分区。@Chandan - 如果您的 RDD 没有足够的分区,请在运行计算之前尝试使用 `RDD.repartition(N)` 对其进行显式重新分区。更多,较小的分区将使每个任务(我认为我们不谈论 Spark 中的“映射器”)更少的工作要做。 (2认同)