【问题标题】:Avro schema with the java lang Object type as datatype使用 java lang Object 类型作为数据类型的 Avro 模式
【发布时间】:2019-05-04 17:40:14
【问题描述】:

我正在学习 avro 模式,并尝试制作一个小项目。看来我被困住了。我也尝试查看文档,但看起来很混乱。

假设我必须为这个类创建一个架构

class example implements Serializable {
private Object data;
}

对应的 avro schema(.avsc) 是什么?

我使用反射来获取架构并为其获取了相应的 avsc,但是当您执行 mvn 编译时,它只会抛出错误

【问题讨论】:

  • 获取结果架构和 mvn compile 上的错误会很有帮助,几乎可以肯定这不受支持,但是有一些解决方法
  • 你建议我怎么做,因为这不是极端情况。
  • 首先使用反射和编译错误添加架构结果。如果你的对象是可序列化的,你总是可以在你的模式中创建一个字节 [] 数组来处理它

标签: java serialization avro


【解决方案1】:
{
    "type": "record",
    "name": "example",
    "fields": [{
            "name": "x1",
            "type": {
                "type": "map",
                "values": {
                    "type": "record",
                    "name": "Object",
                    "namespace": "java.lang",
                    "fields": []
                }
            }
        }, {
            "name": "data",
            "type": "java.lang.Object"
        }
    ]
}

【讨论】:

  • 正确的类声明如下: public class example implements Serializable { private Map x1;私有对象数据;请注意,我们在 java 中不使用 Private,而是使用 private。
  • 你在 Github 上有资源吗?
  • 你是通过reflect api 生成这个schema的吧?这不会编译,如果你尝试
  • 好的。这是要序列化的类:import java.io.Serializable;导入 java.util.Map;公共类示例实现 Serializable { private Map x1;私有对象数据;公共示例(地图 x1,对象数据){ this.x1 = x1; this.data = 数据; } }
  • 导入 org.apache.avro.Schema;导入 org.apache.avro.file.DataFileWriter;导入 org.apache.avro.io.DatumWriter;导入 org.apache.avro.reflect.ReflectData;导入 org.apache.avro.reflect.ReflectDatumWriter;导入java.io.File;导入 java.io.IOException;导入 java.util.HashMap;导入 java.util.Map;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
  • 2020-06-17
  • 2021-08-13
  • 2018-01-24
  • 1970-01-01
  • 2023-01-26
相关资源
最近更新 更多