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

标签 java scala hadoop apache-spark

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

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

最佳答案

您可以使用 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 都将作为任务的输入并加载到分区。

关于java - 如何将 zip 文件的内容分配给 Spark 中的每个任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41678689/

相关文章:

java - 当引用子类的成员时如何调用 super()

java - 基于随机整数重复图像

java - 在 JAX-RS Web 服务过滤器中获取 JSON 消息

scala - 用于融合平台的 sbt 解析器

hadoop - build hadoop3.1.1 failed for CMake test failed on hadoop-yarn-server-nodemanager

java - 为 Java/Spring RESTful 服务创建客户端

arrays - Scala:将文件逐行读入列表数组

scala - intellij 中的 New->Scala 类是否可以默认创建案例类(与常规类相比)?

java - HDFS中用于异构Hadoop集群的数据放置和分发

hadoop - 如何文件监视目录然后自动加载到 HDFS