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