繁体   English   中英

Flink 动态生成 TypeInformation

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM