2013-04-30 160 views
33

對於大數據項目,我計劃使用spark,它具有一些很好的功能,例如針對重複工作負載的內存計算。它可以在本地文件上運行,也可以在HDFS上運行。Spark中的gzip支持

但是,在官方文檔中,我找不到任何有關如何處理gzip文件的提示。實際上,處理.gz文件而不是解壓縮文件可能非常有效。

有沒有辦法手動實現讀gzipped文件或解壓縮已經自​​動完成閱讀.gz文件時?

回答

66

從星火Scala編程指南的section on "Hadoop Datasets"

星星之火,可以從存儲在Hadoop分佈式文件系統(HDFS)或通過Hadoop的支持其他存儲系統(包括本地文件系統中的任何文件創建分佈式數據集,亞馬遜S3,Hypertable,HBase等)。 Spark支持文本文件,SequenceFiles和任何其他Hadoop InputFormat。

對gzip輸入文件的支持應該與Hadoop中的相同。例如,sc.textFile("myFile.gz")應自動解壓並讀取gzip壓縮文件(textFile()實際上是implemented,使用Hadoop的TextInputFormat,它支持gzip壓縮文件)。

正如在評論中提到通過@尼克 - chammas:

請注意,如果你在一個壓縮文件中調用sc.textFile(),星火會給你 的RDD只有1分(截至0.9.0) 。這是因爲 gzip文件是not splittable。如果不重新分區RDD 不知何故,對RDD任何操作將僅限於單核

+45

我想指出,如果你調用'sc.textFile()'對gzip壓縮文件,星火會給你只有一個分區的RDD(從0.9.0開始)。這是因爲gzipped文件[不可拆分](http://mail-archives.apache.org/mod_mbox/spark-user/201310.mbox/%[email protected] .COM%3E)。如果您不以某種方式重新對RDD進行重新分區,則該RDD上的任何操作都將限制爲單個核心。 – 2014-04-03 19:37:06

+3

當我嘗試'logs = sc.textFile(「logs/*。bz2」)'時,後續的'logs.count()'出現錯誤。任何想法爲什麼? – zbinsd 2015-03-16 18:46:59

+0

@zbinsd你有沒有想過在最後?加載tar.gz文件時出現以下錯誤:JsonParseException:非法字符((CTRL-CHAR,代碼0)):令牌之間只允許使用常規空格(\ r,\ n,\ t) – Leon 2015-10-27 17:01:50