【问题标题】:Read AVRO file using Python使用 Python 读取 AVRO 文件
【发布时间】:2013-08-26 21:07:59
【问题描述】:

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

我了解到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())

提前致谢。

【问题讨论】:

  • en.wikipedia.org/wiki/Acronym,Java 和 Avro 不是首字母缩写词
  • @Steve Kuo 您可以使用各种语言创建 AVRO 文件,例如使用 JAVA/Python/EXCEL 创建 CSV 文件。对吗?我并不是说 AVRO 文件是 JAVA 只是为了向读者提供有关文件来源的更多信息.. 不知道这会有所帮助还是误导
  • 我只是指出 Java 和 Avro 是单词,而不是首字母缩略词,因此不应该全部大写

标签: java python mapreduce avro


【解决方案1】:

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

【讨论】:

  • 我试过了,但没有运气。它抱怨 snappy-c.h missing... 等导致失败。我是否必须首先将 google snappy c 库放在环境路径中等等...才能使 python 安装工作?我觉得活泼的可能是解决方案:) 谢谢
  • 是的,您必须先安装我链接到的 snappy C 库。它在这里:code.google.com/p/snappy - 或者可能已经为您的 Linux 发行版/Mac OS homebrew 打包。
  • 对于 Ubuntu,请参阅 How do I enable the “Universe” repository?apt-get install python-snappy libsnappy1 libsnappy-dev
  • @B.Mr.W.你让它工作了吗?还是.avro 文件是公开的?
  • 我在公司环境中工作,嵌套依赖项安装起来并不容易。在那种情况下,我最终使用了 JAVA,这是一个班轮。
【解决方案2】:

问题在于,如果没有安装 Xcode 命令行工具,您将无法快速运行。您可以通过在命令提示符下键入 gcc 来检查它是否已安装。如果没有,则输入xcode-select –-install 进行安装。然后安装 python-snappy 应该可以工作。谢谢斌!

【讨论】:

    【解决方案3】:

    wgethttp://www.us.apache.org/dist/avro/avro-1.7.5/java/avro-tools-1.7.5.jar

    java -jar avro/avro-tools-1.7.5.jar tojson input.avro > 输入

    More information refers here

    【讨论】:

      猜你喜欢
      • 2018-08-10
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      相关资源
      最近更新 更多