gpt4 book ai didi

hadoop - 在 hadoop/map reduce 中读取 avro 格式数据

转载 作者:可可西里 更新时间:2023-11-01 16:55:55 25 4
gpt4 key购买 nike

我正在尝试读取保存在 hdfs 中的 hadoop 中的 avro 格式数据。但我见过的大多数例子都要求我们将模式解析到作业中。但是我无法理解该要求。我使用 pig 和 avro,我从未传递过模式信息。

所以,我想我可能遗漏了一些东西。基本上,如果我没有架构信息,那么在 hadoop mapreduce 中读取 avro 文件的好方法是什么?谢谢

最佳答案

你说得对,Avro 对于提前知道类型非常严格。如果您不知道架构,我知道的唯一选择是将其作为 GenericRecord 读取。这是如何做到这一点的片段

public class MyMapper extends extends Mapper<AvroKey<GenericRecord>, NullWritable, ... > {
@Override
protected void map(AvroKey<GenericRecord> key, NullWritable value, Context context) throws IOException, InterruptedException {
GenericRecord datum = key.datum();
Schema schema = datum.getSchema();
Object field1 = datam.get(0);
Object someField = datam.get("someField");
...
}
}

当然,您不会有很好的 getter 和 setter,因为 Java 不知道它是什么类型。唯一可用的 getter 按位置或名称检索字段。您必须将结果转换为您知道该字段的类型。如果您不知道,则必须对所有可能性进行 instanceof 检查,因为 Java 是静态编译的(这也是为什么它不像您最初认为的那样有用)到模式)。

但是如果您知道它可能是(或应该是)的类型,您可以在从 avsc 生成的类(您希望输入的是)上调用 getSchema(),创建一个新的它的实例,然后将字段一一映射到 GenericRecord 中的新对象。这将使您重新访问正常的 Avro 方法。在处理联合、空值和模式版本控制时,这当然会变得更加复杂。

关于hadoop - 在 hadoop/map reduce 中读取 avro 格式数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29979282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com