使用 Avro Schema 创建 n 叉树
Create n-ary tree using Avro Schema
我需要在 .avsc
文件中定义一个模式,它将使用 maven 插件编译,以创建 classes。
class必须是一棵树,其中根是不同的类型,所有节点都是另一种类型。
例如:
(Root) -> (Node A) -> (Node C) -> (Node F)
- -> (Node D)
- -> (Node E)
- -> (Node B) -> (Node F)
要遵循此结构,classes 需要遵循:
class Node {
String id;
String name;
ArrayList<Node> children;
}
class Root {
ArrayList<Node> children;
}
我知道我可以简单地扩展 SpecificRecordBase
使我的 class 遵循我使用相同插件生成的其他 Record
class 的结构,和 avro 模式;但是有没有办法使用 avro 模式创建这样的结构?
这应该有效:
{
"namespace": "com.tree.yournamespace",
"type": "record",
"name": "TreeRoot",
"fields": [
{
"name": "nodes", "type": {
"type": "array",
"items": {
"name": "Node",
"type": "record",
"fields": [
{"name": "children", "type": {
"type": "array",
"items": "Node"
}
}
]
}
}
}
]
}
我需要在 .avsc
文件中定义一个模式,它将使用 maven 插件编译,以创建 classes。
class必须是一棵树,其中根是不同的类型,所有节点都是另一种类型。
例如:
(Root) -> (Node A) -> (Node C) -> (Node F)
- -> (Node D)
- -> (Node E)
- -> (Node B) -> (Node F)
要遵循此结构,classes 需要遵循:
class Node {
String id;
String name;
ArrayList<Node> children;
}
class Root {
ArrayList<Node> children;
}
我知道我可以简单地扩展 SpecificRecordBase
使我的 class 遵循我使用相同插件生成的其他 Record
class 的结构,和 avro 模式;但是有没有办法使用 avro 模式创建这样的结构?
这应该有效:
{
"namespace": "com.tree.yournamespace",
"type": "record",
"name": "TreeRoot",
"fields": [
{
"name": "nodes", "type": {
"type": "array",
"items": {
"name": "Node",
"type": "record",
"fields": [
{"name": "children", "type": {
"type": "array",
"items": "Node"
}
}
]
}
}
}
]
}