我正在使用 flink 1.15.2,我应该使用 Row 还是 GenericRowData 来继承我自己的数据类型的 RowData?,我主要使用流式 API。 谢谢。 西格。
一般来说,DataStream API 在记录类型方面非常灵活。POJO类型可能是最方便的类型。基本上可以使用任何Java类,但您需要检查通过反射提取哪些TypeInformation
。有时需要手动覆盖它。
对于Row
,您将始终必须手动提供类型,因为反射无法根据类签名执行太多操作。
GenericRowData
应该避免,它是一个内部类,有许多警告(字符串必须StringData
并且数组处理并不简单)。反序列化后GenericRowData
也变得BinaryRowData
。TLDR 此类型适用于 SQL 引擎。
文档在这里实际上很有帮助,我也很困惑。
顶部标题为"所有已知实现类"的部分列出了所有实现。RowData
和GenericRowData
被描述为内部数据结构。 如果你可以使用POJO,那就太好了。 但是如果你需要实现RowData
的东西,请查看BinaryRowData
、BoxedWrapperRowData
、ColumnarRowData
、NestedRowData
或任何未列为内部的实现。
我个人正在使用NestedRowData
将DataStream[Row]
映射到DataStream[RowData]
,我完全不确定这是一个好主意:) 特别是因为我似乎无法添加string
属性