使用 Python 读取 AVRO 文件

B.M*_*.W. 4 python java mapreduce avro

我有一个 AVRO 文件(由 JAVA 创建),它似乎是用于 hadoop/mapreduce 的某种压缩文件,我想将它“解压缩”(反序列化)为一个平面文件。每行每条记录。

我了解到python有一个AVRO包,我正确安装了它。并运行示例读取 AVRO 文件。但是,它出现了下面的错误,我想知道阅读最简单的例子是怎么回事?谁能帮我解释下面的错误。

>>> reader = DataFileReader(open("/tmp/Stock_20130812104524.avro", "r"), DatumReader())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/.../python2.7/site-packages/avro/datafile.py", line 240, in __init__
    raise DataFileException('Unknown codec: %s.' % self.codec)
avro.datafile.DataFileException: Unknown codec: snappy.
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果我做文件的“头部”,并使用 VI 打开 AVRO 文件的前几行,我可以看到模式定义和一些蹩脚的奇怪字符 - 可能是压缩内容。原始 AVRO 文件的起始位如下所示:

bj^A^D^Tavro.codec^Lsnappy^Vavro.schemaØ${"type":"record","name":"Stoc...
Run Code Online (Sandbox Code Playgroud)

我不知道读取 AVRO 文件是否需要这些模式,如下所示:

schema = avro.schema.parse(open("schema").read())
# include schema to do sth...
reader = DataFileReader(open("Stock_20130812104524.avro", "r"), DatumReader())
Run Code Online (Sandbox Code Playgroud)

提前致谢。

chl*_*nde 6

尝试pip install python-snappy- 确保您先安装了snappy

  • 对于 Ubuntu,请参阅 [如何启用“Universe”存储库?](http://askubuntu.com/questions/148638/how-do-i-enable-the-universe-repository) 和 `apt-get install python -snappy libsnappy1 libsnappy-dev` (2认同)