因此,我在从HDFS解密一个snappy文件时遇到了一些问题。如果我使用hadoop fs -text,我可以解压缩和输出文件只是文件。但是,如果我使用hadoop fs -copyToLocal并尝试用python解压缩文件,则会得到
snappy.UncompressError:解压缩时出错:无效输入
我的python程序非常简单,如下所示:
import snappy
with open (snappy_file, "r") as input_file:
data = input_file.read()
uncompressed = snappy.uncompress(data)
print uncompressed这对我来说是不幸的失败。所以我尝试了另一个文本,我从hadoop fs -text获取输出并使用python库压缩它。然后我将其输出到一个文件中。然后,我能够读取这个文件,并解压缩它很好。
AFAIK snappy是向后兼容的版本。我的python代码使用的是最新的snappy版本,我猜hadoop使用的是旧的snappy版本。这会不会是个问题?还是我在这里还遗漏了什么?
发布于 2017-12-30 00:24:21
好吧,我想出来了。原来我使用的是使用hadoop的框架格式压缩的文件的原始模式解压缩。即使我在0.5.1中尝试了StreamDecompressor,它仍然因为一个框架错误而失败。Python-snappy0.5.1默认为新的snappy 帧格式,因此不能解压缩hadoop文件。
原来,主版本0.5.2增加了对hadoop框架格式的支持。一旦我构建并导入了它,我就能够轻松地解压该文件:
with open (snappy_file, "r") as input_file:
data = input_file.read()
decompressor = snappy.hadoop_snappy.StreamDecompressor()
uncompressed = decompressor.decompress(data)现在唯一的问题是,这在技术上还不是一个pip版本,所以我想我必须等待或只使用从源代码构建。
https://stackoverflow.com/questions/48016126
复制相似问题