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

标签 hadoop apache-spark

我在 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/

相关文章:

oracle - 在哪里做连接以展平表..? Hive或Oracle

java - Hadoop - 直接从 Mapper 写入 HBase

php - 由于找不到GCC 4.2.0,无法使用php执行hadoop命令

apache-spark - 在循环内使用 sparkDF.write.saveAsTable() 会导致作业之间的延迟呈指数增长

hadoop - Spark提交无法在EMR上运行-Oozie Launcher失败,尝试将apacheds-i18n-2.0.0-M15.jar多次添加到分布式缓存中

java - Hadoop - 如何使用和减少多个输入?

r - 具有多个组件的RHadoop key

scala - 如何在 ScalaTest 测试中正确使用 Spark?

sql - 如何测量 Spark 上查询的执行时间

scala - Spark MLLib线性回归模型截距始终为0.0?