有没有一种方法可以定义一个递归引用自己的Flink POJO类型



我试图将树结构存储在状态中,但在没有将自引用创建为泛型类型的情况下创建自定义TypeInformation时遇到了一些困难。

例如,我的模型看起来像:

public class Node {
private Map<String, Node> nodeMap;
}

我看到Flink支持Avro状态的递归类型,但我似乎找不到POJO的解决方法。

在深入研究Flink序列化代码(截至1.11(后,当Flink检测到递归时,它将为根节点的所有子节点回退到Kryo。

解决方法是将节点存储在扁平的数据结构中,如HashMap(或Flink的本地MapState(,由某种nodeId键控,然后在树中使用该引用并使用它来执行实际节点的查找。