从Spark中的tar.gz存档中读取文件

时间:2017-07-06 17:16:13

标签: java apache-spark

我有一堆tar.gz文件,我想用Spark处理它们而不解压缩它们。

单个存档大约约700MB,包含10个不同的文件,但我只对其中一个感兴趣(解压后约为7GB)。

我知道context.textFile支持tar.gz但是我不确定当存档包含多个文件时它是否是正确的工具。会发生什么事情,Spark将返回存档中所有文件的内容(逐行),包括带有一些二进制数据的文件名。

有没有办法从tar.gz中选择我要映射的文件?

1 个答案:

答案 0 :(得分:1)

AFAIK,我建议使用sc.binaryFiles方法...请参阅下面的doc。如果存在文件名和文件内容,您可以映射和拾取所需的文件并进行处理。

public RDD<scala.Tuple2<String,PortableDataStream>> binaryFiles(String path,
                                                           int minPartitions)

为每个文件获取Hadoop可读数据集的RDD作为PortableDataStream(对二进制数据有用) 例如,如果您有以下文件:

  

HDFS:// A-HDFS路径/部分-00000
    HDFS:// A-HDFS路径/部分-00001
  ...
   HDFS:// A-HDFS路径/部分NNNNN

执行val rdd = sparkContext.binaryFiles("hdfs://a-hdfs-path"),

然后rdd包含

  

(a-hdfs-path / part-00000,其内容)
     (a-hdfs-path / part-00001,其内容)
     ...
  (a-hdfs-path / part-nnnnn,其内容)

另外,请检查this