如何将 zip 文件的内容分配给 Spark 中的每个任务?

Posted

技术标签:

【中文标题】如何将 zip 文件的内容分配给 Spark 中的每个任务?【英文标题】:How to assign content of a zip file to each task in Spark? 【发布时间】:2017-01-16 14:30:44 【问题描述】:

所以,我有一个应用程序,其中有多个位于 HDFS 目录中的压缩文件。我想创建一个 RDD,其中每个任务都处理一个 zip 文件的内容。此时,我从文件名创建一个 RDD,并在每个任务中,使用 HDFS 客户端库读取 zip 文件的内容。

但是,我不想这样做,而是让一个任务自动分配 zip 文件的内容。我认为这样会更有效,因为计算任务会转到包含 zip 文件的节点,而在我目前的方法中,我将数据带到计算任务中,这意味着任务可能必须读取 zip 文件分布在其他节点上。

【问题讨论】:

【参考方案1】:

您可以使用 Hadoop RDD API(示例 PySpark 代码):

  newconf = "mapred.input.dir": <<DIRECTORY>>                        
    hadoopRdd01 = sc.newAPIHadoopRDD("org.apache.hadoop.mapreduce.lib.input.TextInputFormat",
                                "org.apache.hadoop.io.Text",
                                "org.apache.hadoop.io.Text",
                                conf=newconf)

如果您使用的是 zip/gz,则文件不可拆分,因此每个 zip 都将是任务的输入并加载到分区。

【讨论】:

以上是关于如何将 zip 文件的内容分配给 Spark 中的每个任务?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 spark(python)读取 zip 文件中的 CSV 文件的内容 [重复]

如何使用 Spark/Scala 在 HDFS 上编写/创建 zip 文件?

参数类型“字符串”不能分配给参数类型“目录”

Apache Spark 如何将分区 ID 分配给其执行程序

Spark中的虚拟内存是如何计算的?

Python Bruteforcing zip文件无法分配给函数调用