Java Flink DataStream如何将自定义POJO组合到另一个DataStream中
我想将数据流转换为具有模式信息的数据流 输入 args[0]数据流Java Flink DataStream如何将自定义POJO组合到另一个DataStream中,java,serialization,apache-flink,converters,Java,Serialization,Apache Flink,Converters,我想将数据流转换为具有模式信息的数据流 输入 args[0]数据流 {"fields":["China","Beijing"]} args[1]模式 message spark_schema { optional binary country (UTF8); optional binary city (UTF8); } 预期产出 {"country":"china", "city":"beijing"} 我的代码是这样的 公共数据流转换(数据流源,MessageType Messa
{"fields":["China","Beijing"]}
args[1]模式
message spark_schema {
optional binary country (UTF8);
optional binary city (UTF8);
}
预期产出
{"country":"china", "city":"beijing"}
我的代码是这样的
公共数据流转换(数据流源,MessageType MessageType){
SingleOutputStreamOperator dataWithSchema=source.map((MapFunction)行->{
JSONObject数据=新的JSONObject();
this.fields=messageType.getFields().stream().map(Type::getName).collect(Collectors.toList());
对于(int i=0;iFlink map操作符如何组合外部复杂POJO?对于Flink在任务之间分配代码,代码需要完全可
序列化。在你的第一个例子中,它不是;第二种情况是。特别是,Type::getName
将生成一个不可序列化的lambda
要获得可序列化的lambda,您需要将其显式转换为可序列化接口(例如FlinkMapFunction
),或者将其与(可序列化和函数)
由于第二种方法也可以节省计算量,因此在任何情况下都会更好。在作业编译期间,Convert只执行一次,而对每个记录调用DataStream#map
。如果不清楚,我建议在IDE中执行它,并使用断点进行处理。Args 0是拼花地板类型吗?还有用例是什么,Source->logic->sinkYes,args0是拼花地板类型。用例是用模式读取拼花文件和输出数据,但直接读取的数据流只包含行数据,不包含模式信息流的源。卡夫卡?else源代码是拼花文件