我有一堆tar.gz文件,我想用Spark处理它们而不解压缩它们。
单个存档大约约700MB,包含10个不同的文件,但我只对其中一个感兴趣(解压后约为7GB)。
我知道context.textFile
支持tar.gz但是我不确定当存档包含多个文件时它是否是正确的工具。会发生什么事情,Spark将返回存档中所有文件的内容(逐行),包括带有一些二进制数据的文件名。
有没有办法从tar.gz中选择我要映射的文件?
答案 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