2013-08-26 125 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