2017-07-06 50 views
2

我有一堆tar.gz文件,我想用Spark處理而不解壓縮它們。從Spark中的tar.gz存檔中讀取文件

單個存檔約爲〜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可讀數據集作爲PortableDataStream每個文件的RDD(對於二進制數據是有用的) 例如,如果你有以下文件:

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

待辦事項VAL rdd = sparkContext.binaryFiles("hdfs://a-hdfs-path"),

然後RDD包含

(α-HDFS路徑/部分-00000,其內容)
(A-HDFS路徑/部分-00001,其內容)
...
(A-HDFS路徑/部分NNNNN,其內容)

此外,檢查this