2016-08-08 8 views
3

私はの値の2つのフィールドを持つスカラクラスを持っていますが、フリンクはセッターを持っていないと言っています。したがって、タスクはシリアライズ可能ではありません。Flinkはスカラクラスをシリアライズできません/タスクがシリアライズ不可能

私はvarを使ってセッターを試みましたが、それは重複セッターと言います。なぜそれがセッターを求めているのですか? FLINKバージョン1.1.0

class Impression(val map: Map[String, String],val keySet:Set[String]) 

マイコード:

val preAggregate = stream 
.filter(impression => { 
    true 
}) 
.map(impression => { 
    val xmap = impression.map 
    val values = valFunction(xmap) 
    new ImpressionRecord(impression, values._1, values._2, values._3) 
}) 

例外:

**class Impression does not contain a setter for field map** 
19:54:49.995 [main] INFO o.a.f.a.java.typeutils.TypeExtractor - class Impression is not a valid POJO type 
19:54:49.997 [main] DEBUG o.a.flink.api.scala.ClosureCleaner$ - accessedFields: Map(class -> Set()) 
Exception in thread "main" **org.apache.flink.api.common.InvalidProgramException: Task not serializable 
at** org.apache.flink.api.scala.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:172) 
at) 
Caused by: java.io.NotSerializableException: org.apache.flink.streaming.api.scala.DataStream 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183) 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547) 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508) 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431) 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547) 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508) 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431) 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) 
at org.apache.flink.util.InstantiationUtil.serializeObject(InstantiationUtil.java:301) 
at org.apache.flink.api.scala.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:170) 
... 18 more 

答えて

0

は、直接ではなく、クラスのフィールドを使用する方法の内側にそれをラップしないようにしてください、あなたはほとんど良いです行く。

関連する問題