2017-04-05 384 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公用事业。