问题标签 [avro]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
184 浏览

java - 有没有人使用 ruby​​ avro sample_ipc_http_client.rb 与 Java 实现的 avro 服务器通信?

我一直在尝试使此设置正常工作,但是当我向 avro-1.7.1 服务器发出请求时,我得到一个

在服务器端,我看到以下消息。avro 服务器在 Netty-3.4.0 上运行:

java.lang.OutOfMemoryError:Java 堆空间

我有一个协议/模式来描述我试图提出的请求:

根据 http_client 示例,我的请求正在加载我的协议,它可以很好地解析,我的请求现在是:

有没有人让 Ruby 客户端与 Java avro 服务器通信?谢谢你的帮助!

0 投票
2 回答
1925 浏览

java - 如何从固定宽度的文本文件创建 .avro 文件?

我想从具有固定线宽的文本文件生成 .avro 文件。我是 java 和 .avro 的初学者,所以请帮我解决这个问题。

如何从 Java 中的固定宽度文本文件创建 .avro 文件?

0 投票
1 回答
6157 浏览

java - 用于将字段从基元演变为联合的 Avro 模式解析

我正在使用 Avro 1.7.0 使用其Java 的通用表示 API,并且在处理我们当前的模式演变案例时遇到了问题。我们在这里处理的场景是通过将字段更改为与该原始类型的联合来使原始类型字段成为可选的null

我将使用一个简单的例子。基本上,我们的模式是:

  • 初始:具有一个类型字段的记录int
  • 第二个版本:相同的记录,相同的字段名称,但类型现在是和的null并集int

根据 Avro 规范的架构解析章节,这种情况的解析应该是:

如果读者是一个联合,但作者不是
读者联合中与作者模式匹配的第一个模式将针对它递归解析。如果没有匹配,则发出错误信号。

我的解释是,我们应该正确地解析使用初始模式序列化的数据,因为int它是读者模式中联合的一部分。

但是,当运行使用版本 2 读回使用版本 1 序列化的记录的测试时,我得到

org.apache.avro.AvroTypeException: Attempt to process a int when a union was expected.

这是一个测试,正好显示了这一点:

我想知道我的期望是否正确(这应该成功解决吧?)或者我没有正确使用 avro 来处理这种情况。

0 投票
1 回答
1365 浏览

apache-pig - 在 pig 中使用 avro 加载和存储多个文件时的运行时异常

当我尝试加载多个文本格式的文件并使用 pig 将它们转换为 avro 格式时,我遇到了这个奇怪的问题。但是,如果我在分开的运行中一次读取和转换一个文件,一切都很好。错误消息如下

2012-08-21 19:15:32,964 [main] 错误 org.apache.pig.tools.grunt.GruntParser - 错误 2997:无法从支持的错误重新创建异常:org.apache.avro.file.DataFileWriter$AppendWriteException:java .lang.RuntimeException: Datum 1980-01-01 00:00:00.000 不在 org.apache.avro.file.DataFileWriter.append(DataFileWriter.java:263) 的联合 ["null","long"] 中.apache.pig.piggybank.storage.avro.PigAvroRecordWriter.write(PigAvroRecordWriter.java:49) 在 org.apache.pig.piggybank.storage.avro.AvroStorage.putNext(AvroStorage.java:612) 在 org.apache.pig .backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat$PigRecordWriter.write(PigOutputFormat.java:139) 在 org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat$PigRecordWriter。write(PigOutputFormat.java:98) at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.write(MapTask.java:531) at org.apache.hadoop.mapreduce.TaskInputOutputContext.write(TaskInputOutputContext.java:80) at org .apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigMapOnly$Map.collect(PigMapOnly.java:48) 在 org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBbackend.hadoop.executionengine.mapReduceLayer.PigGenericMapBbackend.hadoop.executionengine.mapReduceLayer.PigGenericMapB

我的代码是

第一个文件转换得很好,但第二个文件失败了。错误来自第二个文件中的第二个字段,但奇怪的是我的架构中甚至没有“long”,而错误消息显示 ["null","long"]。

我使用猪 0.10.0 和 avro-1.7.1.jar。

我想知道这是一个错误还是我错过了什么。

谢谢。担

这是set1.txt

这是 set2.txt

0 投票
3 回答
5828 浏览

protocol-buffers - Avro 模式演变是否需要同时访问旧模式和新模式?

如果我使用模式版本 1 序列化对象,然后将模式更新到版本 2(例如通过添加字段) - 以后反序列化对象时是否需要使用模式版本 1?理想情况下,我只想使用模式版本 2,并让反序列化对象具有在对象最初序列化后添加到模式中的字段的默认值。

也许一些代码会更好地解释......

架构1:

架构2:

使用通用的非代码生成方法:

导致 EOFException。jsonEncoder在 AvroTypeException 中使用结果。

我知道如果我将 schema1 和 schema2 都传递给GenericDatumReader构造函数,它将起作用,但我不想保留所有先前模式的存储库,并且还以某种方式跟踪用于序列化每个特定对象的模式。

我还尝试了代码生成方法,首先使用从 schema1 生成的 User 类序列化到文件:

然后将模式更新到版本 2,重新生成 User 类,并尝试读取文件:

但它也会导致 EOFException。

只是为了比较,我正在尝试做的似乎与protobufs一起工作......

格式:

连载:

添加可选的 last_name 以格式化、重新生成 UserProto 和反序列化:

正如预期的那样,user.getLastName()是空字符串。

可以用 Avro 完成这样的事情吗?

0 投票
1 回答
1198 浏览

scala - 可以从内存中将 avros 反序列化为 Scala 案例类,但为什么不能从文件中反序列化?记录不能转换为案例类?

我正在尝试使用 Salat-Avro 序列化和反序列化 Scala 案例类。

我可以在内存中很好地序列化和反序列化,但我只能序列化到文件;我还不能反序列化表单文件。

为什么我的 DatumReader 在读取文件时不会像从流中读取一样成功?

这是代码:

val obj2 = grater[Record].asObjectFromDataFile(infile)

调用:

} `

代码也可以在 Github.com 上看到: Salat-Avro-Example.scalaSalat-Avro.avrograter.scala

我该如何解决?谢谢!

0 投票
2 回答
2140 浏览

java - 在猪中使用 AvroStorage()

我正在尝试在 Java 中构建我的第一个 Pig UDF,并且在使用 Eclipse 构建时无法调用该函数我的代码如下所示:

注册 /home/user2/deb/deb/avro-1.4.0.jar 注册 /home/user2/deb/deb/json-simple-1.1.jar 注册 /home/user2/deb/deb/piggybank.jar 注册 /home /user2/deb/jackson-core-asl-1.5.5.jar 注册 /home/user2/deb//jackson-mapper-asl-1.5.5.jar

C = FOREACH avro GENERATE masking.AccountMask(accntNo); 转储 C;

0 投票
2 回答
1247 浏览

hadoop - 使用 piggybank 和 AvroStorage 解决 EMR 问题

我在 EMR 上运行一个猪脚本,它读取以 Avro 格式存储的数据。它一直在本地运行,但为了让脚本的其他部分在 EMR 上运行,我不得不将我使用的 piggybank.jar 恢复为 0.9.2 而不是 0.10.0。进行该更改后,AvroStorage 静默读取任何数据失败,仅返回零记录。日志中没有提到任何内容。这是脚本:

同样,如果 piggybank.jar 是 0.10.0 版,它可以工作。如果是 0.9.2 版,则不是。我应该使用任何其他库的不同版本吗?我尝试使用 avro-1.5.3.jar,但也没有用。

另一个注意事项:如果我describe a;正确地输出模式。

0 投票
0 回答
1994 浏览

java - 如何在 Java 中处理联合类型的 Avro 数组?

我有一个使用 IDL 定义的 Avro 模式,类似于以下内容:

我正在使用此架构中自动生成的 Java 类。除了 Gizmos 和 Gadgets 之外,还有很多类型可以在 items 数组中,但是让我们规定所有类型都有名称和成本。

据我了解,没有办法为 Avro 记录指定继承,所以getItems()Order 对象必然会给我List<Object>. 也就是说,我想要更多上下文和类型安全的东西;到目前为止,我已经提出了三种方法,但它们似乎都不是很可口。

方法 1:执行未经检查的转换为List<SpecificRecord>(实际上是转换为List,然后是另一个转换为,List<SpecificRecord>因为泛型的工作原理)并使用get(int field),知道名称和成本将分别是字段 1 和 2。一旦我得到这些,我也必须将它们转换为适当的类型。这似乎非常脆弱。

方法 2:遍历 items 数组,并单独转换每个项目。我可以像第一种方法一样强制转换SpecificRecord并使用索引获取,或者执行一系列instanceof检查,然后按名称获取字段。这要么是脆弱的,要么是费力的。

方法 3:编写我自己的类来实现SpecificRecord并具有适当的类层次结构。这失去了自动生成代码的好处,但似乎也是最健壮的选择,但也非常费力。

其中哪一个是最好的?还是有更好的选择?

0 投票
2 回答
39845 浏览

java - 如何在 Java 中使用 AVRO 序列化日期

我实际上是在尝试使用 Avro 序列化包含日期的对象,并且反序列化的日期与预期值不匹配(使用 avro 1.7.2 和 1.7.1 测试)。这是我正在序列化的课程:

用于序列化/反序列化的代码:

和输出:

它与已知错误有关,还是与我序列化对象的方式有关?