有没有办法定义递归引用自身的 Flink POJO 类型?

Is there a way to define a Flink POJO type which recursively references itself?

我正在尝试在状态中存储树结构,但在创建自定义 TypeInformation 时遇到了一些困难,而没有将自引用创建为通用类型。

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

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

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

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

解决方法是将您的节点存储在一个扁平化的数据结构中,例如 HashMap(或 Flink 的原生 MapState),以某种 nodeId 为键,然后在您的树中使用该引用并使用它来执行外观 -实际节点的ups。