2013-08-26 67 views
3

我有一个AVRO文件(由JAVA创建),好像是某种压缩文件,用于hadoop/mapreduce,我想将其解压缩(反序列化)到一个平面文件。每行记录。使用Python读取AVRO文件

我知道python有一个AVRO package,我正确安装了它。并运行该示例来阅读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. 

顺便说一句,如果我做文件的“头”,并使用VI开拓AVRO文件的前几行,我可以加上一些糟糕的怪异字符看到的模式定义。 原始AVRO文件的起始位看起来象下面这样:

bj^A^D^Tavro.codec^Lsnappy^Vavro.schemaØ${"type":"record","name":"Stoc... 

我不知道,如果这些模式将需要阅读的文件AVRO,像下面:

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

在感谢提前。

+0

https://en.wikipedia.org/wiki/Acronym,Java和Avro不是首字母缩写词 –

+0

@Steve Kuo您可以使用各种语言创建AVRO文件,例如使用JAVA/Python/EXCEL创建CSV文件。 ?我不是说AVRO文件是JAVA,只是为了给读者提供更多关于文件来自哪里的信息..不知道会有帮助还是误导性的 –

+1

我只是指出Java和Avro是单词,而不是缩写,因此不应该写成全部大写 –

回答

2

的问题是,如果不存在的Xcode命令行安装的工具你不能工作。您可以通过在命令提示符下键入gcc来查看它是否已安装。如果没有,则输入“xcode-select -install”进行安装。然后安装python-snappy应该可以工作。感谢斌!

3

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

+0

我试过,没有运气。它在抱怨snappy-c.h失踪......等导致失败。我必须首先将google snappy c库放在环境路径中或者等等...才能使python安装正常工作吗?我觉得活泼可能是解决方案:)谢谢 –

+0

是的,你必须安装我首先链接到的活泼的C库。它在这里:https://code.google.com/p/snappy/ - 或者可能已经打包为您的Linux发行版/ Mac OS自制软件。 – chlunde

+2

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