Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Flink DataStream如何将自定义POJO组合到另一个DataStream中_Java_Serialization_Apache Flink_Converters - Fatal编程技术网

Java Flink DataStream如何将自定义POJO组合到另一个DataStream中

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

我想将数据流转换为具有模式信息的数据流

输入

args[0]数据流

{"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;i 异常错误

线程“main”org.apache.flink.api.common.invalidProgrameException中的异常:Object com.xxxx.ParquetDataSourceReader$$Lambda$64/1174881426@d78795不可序列化 位于org.apache.flink.api.java.ClosureCleaner.ensureSerializable(ClosureCleaner.java:180) 位于org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.clean(StreamExecutionEnvironment.java:1823) 位于org.apache.flink.streaming.api.datastream.datastream.clean(datastream.java:188) 位于org.apache.flink.streaming.api.datastream.datastream.map(datastream.java:590) 但是下面的代码运行良好

公共数据流转换(数据流源,MessageType MessageType){ if(this.fields==null){ 抛出新的RuntimeException(“AbstractRowStreamReader的架构为空”); } 列表字段=messageType.getFields().stream().map(Type::getName).collect(Collectors.toList()); SingleOutputStreamOperator dataWithSchema=source.map((MapFunction)行->{ JSONObject数据=新的JSONObject(); 对于(int i=0;i
Flink map操作符如何组合外部复杂POJO?

对于Flink在任务之间分配代码,代码需要完全可
序列化。在你的第一个例子中,它不是;第二种情况是。特别是,
Type::getName
将生成一个不可
序列化的lambda

要获得可序列化的lambda,您需要将其显式转换为可序列化接口(例如Flink
MapFunction
),或者将其与
(可序列化和函数)


由于第二种方法也可以节省计算量,因此在任何情况下都会更好。在作业编译期间,Convert只执行一次,而对每个记录调用
DataStream#map
。如果不清楚,我建议在IDE中执行它,并使用断点进行处理。

Args 0是拼花地板类型吗?还有用例是什么,Source->logic->sinkYes,args0是拼花地板类型。用例是用模式读取拼花文件和输出数据,但直接读取的数据流只包含行数据,不包含模式信息流的源。卡夫卡?else源代码是拼花文件