我有数千个压缩文件,每个大小为2GB,位于HDFS中。我正在使用spark来处理这些文件。我使用Spark textFile()方法从HDFS加载文件。我的问题是如何重新分区数据,以便我可以并行处理每个文件。目前,每个.gz文件都在一个任务中处理。因此,如果我处理1000个文件,则只执行1000个任务。据我所知,压缩文件不可拆分。但是,还有其他方法可以用来更快地完成我的工作吗?
答案 0 :(得分:3)
加载文件后,您可以使用rdd.repartition(#partitions)
。这具有相关的随机播放成本,因此您需要评估并行化中的性能增益是否涵盖此初始洗牌成本。
另一种方法是在初始分区上执行任何转换(map,filter,...),并使用管道中已存在的任何shuffle阶段来重新分区RDD。 e.g。
rdd.map().filter().flatMap().sortBy(f, numPartitions=new#ofpartitions)