我在 HDFS 中有数千个大小为 2GB 的压缩文件。我正在使用 spark 来处理这些文件。我正在使用 Spark textFile() 方法从 HDFS 加载文件。我的问题是如何重新分区数据,以便我可以并行处理每个文件。目前每个 .gz 文件都在一个任务中处理。因此,如果我处理 1000 个文件,则只会执行 1000 个任务。我知道,压缩文件不可分割。但是有没有其他方法可以让我更快地运行我的工作?
最佳答案
您可以在加载文件后使用rdd.repartition(#partitions)
。这具有相关的洗牌成本,因此您需要评估并行化的性能提升是否涵盖了这个初始洗牌成本。
另一种方法是在初始分区上执行任何转换(映射、过滤器等),并使用管道中已经存在的任何随机播放阶段对 RDD 进行重新分区。例如
rdd.map().filter().flatMap().sortBy(f, numPartitions=new#ofpartitions)
关于hadoop - 如何在 Apache Spark 中重新分区压缩文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30034245/