[英]Flink generate TypeInformation dynamically
我正在尝试通过 RichMapFunction<Row, Row> 解析数据 stream 一行中的嵌套字段。 这个的输入和output是Row类型的。 一行中的嵌套列可以有任意数量的字段。
DataStream<Row> outStream = stream.map(new ParsePayload(functionMap, inputTypeInformation))
.returns(<output TypeInformation>)
.uid("ParseNestedColumn");
private static class ParsePayload extends RichMapFunction<Row, Row> implements Serializable
{
@Override
public Row map(Row row) throws Exception {
<business logic>
…….
return resultRow;
}
}
问题是,我只想在评估 map function 或通过创建 output 行后返回行的类型信息,因为行中的字段不固定。
我已经尝试了 Types.ROW_NAMED() 和 ResultTypeQueryable 接口,但两者都在评估 map function 之前检查类型信息,这样我就无法向 stream 提供类型信息。
PS - 我不想为我的工作启用通用类型。
我认为这是不可能的。
例如,如果您认为此TypeInformation
用于生成源所需的序列化程序,那么您将在此处创建循环依赖项(源需要TypeInformation
将数据传递给map
,但它不能,因为map
需要先提供TypeInformation
)。
有不同的方法可以做到这一点,但所有方法都需要使用Generic*
类或以byte[]
或String
的形式获取数据并手动解析为预期类型,或者尝试实现可以代表所有可能性的自定义类型你需要处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.