如何在Apache Spark中重新分区压缩文件?

时间:2015-05-04 15:45:21

标签: hadoop apache-spark

我有数千个压缩文件,每个大小为2GB,位于HDFS中。我正在使用spark来处理这些文件。我使用Spark textFile()方法从HDFS加载文件。我的问题是如何重新分区数据,以便我可以并行处理每个文件。目前,每个.gz文件都在一个任务中处理。因此,如果我处理1000个文件,则只执行1000个任务。据我所知,压缩文件不可拆分。但是,还有其他方法可以用来更快地完成我的工作吗?

1 个答案:

答案 0 :(得分:3)

加载文件后,您可以使用rdd.repartition(#partitions)。这具有相关的随机播放成本,因此您需要评估并行化中的性能增益是否涵盖此初始洗牌成本。

另一种方法是在初始分区上执行任何转换(map,filter,...),并使用管道中已存在的任何shuffle阶段来重新分区RDD。 e.g。

rdd.map().filter().flatMap().sortBy(f, numPartitions=new#ofpartitions)