2017-04-05 383 views
1

我從https://censys.io/下載的文件xxxx.json.lz4然而,當我嘗試使用以下行的0.如何星火解壓LZ4 JSON 2

metadata_lz4 = spark.read.json("s3n://file.json.lz4") 

返回我沒有得到任何數據輸出/計數讀取文件沒有結果,儘管手動解壓縮可以正常工作,並且可以導入到Spark中。

我也曾嘗試

val metadata_lz4_2 = spark.sparkContext.newAPIHadoopFile("s3n://file.json.lz4", classOf[TextInputFormat], classOf[LongWritable], classOf[Text]) 

其中還沒有返回結果。

我有這些文件的多個是100GBs每個這樣真正熱衷於不需要手動解壓每一個。

任何想法?

回答

2

根據此open issue火花LZ4解壓縮程序使用不同的規格,然後標準的LZ4解壓縮程序。

因此,直到此問題將在apache-spark中解決,您將無法使用spark LZ4來解壓縮標準LZ4壓縮文件。

我不認爲創建基於文本文件時,我們Lz4Codec實現實際上使用幀 規範(http://cyan4973.github.io/lz4/lz4_Frame_format.html) 。它似乎是作爲編解碼器 添加的,可用於塊壓縮格式,如 SequenceFiles/HFiles /等,但不是面向 的文本文件的外觀,或者是在有沒有FRAME 規格的LZ4。

因此,從根本上說,我們不能與lz4 實用程序進行互操作。區別與GPLExtras的LzoCodec和 LzopCodec非常相似,前者只是數據壓縮算法,後者則是一種實際的幀格式,可與lzop CLI實用程序互操作。

使自己可互操作的,我們需要引入一個新的框架 包裝編解碼器,如LZ4FrameCodec,並且用戶可以使用,當他們 想 LZ4 /解壓縮或壓縮文本數據生成可讀/ lz4cat CLI公用事業。