gpt4 book ai didi

java - 在 Java 中创建 Avro 文件时如何编写联合

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:03 25 4
gpt4 key购买 nike

我正在尝试用 Java 创建 Avro 文件(目前只是测试代码)。一切正常,代码如下所示:

GenericRecord record = new GenericData.Record(schema);

File file = new File("test.avro");
DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<GenericRecord>(schema);
DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<GenericRecord>(datumWriter);
dataFileWriter.create(schema, file);
dataFileWriter.append(record);
dataFileWriter.close();

我现在面临的问题是——写Union的时候实例化什么样的Java对象?不一定在顶层,可能将联合附加到正在写入的记录。有一些为复杂类型准备的对象,如 GenericData.Record、GenericData.Array 等。对于那些没有准备的对象,通常正确的对象只是一个标准的 Java 对象(java.util.Map 为“map”Avro 实现类类型等)。

但我无法弄清楚编写 Union 时要实例化的正确对象是什么。

这个问题是指在没有代码生成的情况下编写 Avro 文件。非常感谢任何帮助。

最佳答案

这是我做的:

假设模式定义如下:

record MyStructure {
...
record MySubtype {
int p1;
}
union {null, MySubtype} myField = null;
...
}

这是 Java 代码:

Schema schema; // the schema of the main structure
// ....
GenericRecord rec = new GenericData.Record(schema);
int i = schema.getField("myField").schema().getIndexNamed("MySubtype");
GenericRecord myField = new GenericData.Record(schema.getField("myField").schema().getTypes().get(i));
myField.put("p1", 100);
rec.put("myField", myField);

关于java - 在 Java 中创建 Avro 文件时如何编写联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22174902/

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