簡體   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