Exception in thread "main" org.apache.flink.api.common.InvalidProgramException: Task not serializable
at org.apache.flink.api.scala.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:408)
at org.apache.flink.api.scala.ClosureCleaner$.org$apache$flink$api$scala$ClosureCleaner$$clean(ClosureCleaner.scala:400)
at org.apache.flink.api.scala.ClosureCleaner$.clean(ClosureCleaner.scala:168)
at org.apache.flink.streaming.api.scala.StreamExecutionEnvironment.scalaClean(StreamExecutionEnvironment.scala:791)
at org.apache.flink.streaming.api.scala.DataStream.clean(DataStream.scala:1168)
at org.apache.flink.streaming.api.scala.DataStream.map(DataStream.scala:617)
at cn.cloudFall.FLinkKafka$.main(FLinkKafka.scala:52)
at cn.cloudFall.FLinkKafka.main(FLinkKafka.scala)
Caused by: java.io.NotSerializableException: com.google.gson.Gson
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at org.apache.flink.util.InstantiationUtil.serializeObject(InstantiationUtil.java:586)
at org.apache.flink.api.scala.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:406)...7 more
Process finished with exit code 1
发生原因
非静态对象没有放在指定封闭的代码块或方法中.
错误代码详细
val gson: Gson =newGson//把map 转回 json
val json: DataStream[String]= mapDS.map(x =>{
val str1: String = gson.toJson(x.asJava)
str1
})
json.print()
修改后代码如下
//把map 转回 json
val json: DataStream[String]= mapDS.map(x =>{(newGson).toJson(x.asJava)})
json.print()