【问题标题】:Serialize Java Library for Spark为 Spark 序列化 Java 库
【发布时间】:2017-05-17 22:38:55
【问题描述】:

我正在使用 Spark 在 scala 中运行脚本。我正在使用 [PrettyTime][1] 作为库。但是它是不可序列化的。

at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:298)
at org.apache.spark.util.ClosureCleaner$.org$apache$spark$util$ClosureCleaner$$clean(ClosureCleaner.scala:288)
at org.apache.spark.util.ClosureCleaner$.clean(ClosureCleaner.scala:108)
at org.apache.spark.SparkContext.clean(SparkContext.scala:2094)
at org.apache.spark.rdd.RDD$$anonfun$map$1.apply(RDD.scala:370)
at org.apache.spark.rdd.RDD$$anonfun$map$1.apply(RDD.scala:369)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
at org.apache.spark.rdd.RDD.withScope(RDD.scala:362)
at org.apache.spark.rdd.RDD.map(RDD.scala:369)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:74)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:84)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:86)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:88)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:90)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:92)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:94)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:96)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:98)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:100)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:102)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:104)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:106)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw.<init>(<console>:108)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw.<init>(<console>:110)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw.<init>(<console>:112)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw.<init>(<console>:114)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw.<init>(<console>:116)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$eval$.$print$lzycompute(<console>:7)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$eval$.$print(<console>:6)
Caused by: java.io.NotSerializableException: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$DateTimeParser$
Serialization stack:
- object not serializable (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$DateTimeParser$, value: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$DateTimeParser$@3b72e48)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, name: DateTimeParser$module, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$DateTimeParser$)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw@2546ce7c)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw@1e837893)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw@5fc3c9ba)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw@2974b4ab)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw@6f1669ab)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw@5617a000)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw@18ccefe9)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw@784ba0ac)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw@4c399f7d)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw@4a43d546)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw@78821701)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw@6eb07bcc)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw@59a7cec1)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw@7b8fc596)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw@6974a1eb)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw@7288ec90)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read, name: $iw, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read, lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read@3a8befaa)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, name: lineb8a1770bfabb4ce4a0bcef2d50888f5495$read, type: class lineb8a1770bfabb4ce4a0bcef2d50888f5495.$read)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw@3d361fe7)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, name: $outer, type: class lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw, lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw@241effb0)
- field (class: lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2, name: $outer, type: class lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw)
- object (class lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2, <function1>)
at org.apache.spark.serializer.SerializationDebugger$.improveException(SerializationDebugger.scala:40)
at org.apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala:46)
at org.apache.spark.serializer.JavaSerializerInstance.serialize(JavaSerializer.scala:100)
at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:295)
at org.apache.spark.util.ClosureCleaner$.org$apache$spark$util$ClosureCleaner$$clean(ClosureCleaner.scala:288)
at org.apache.spark.util.ClosureCleaner$.clean(ClosureCleaner.scala:108)
at org.apache.spark.SparkContext.clean(SparkContext.scala:2094)
at org.apache.spark.rdd.RDD$$anonfun$map$1.apply(RDD.scala:370)
at org.apache.spark.rdd.RDD$$anonfun$map$1.apply(RDD.scala:369)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
at org.apache.spark.rdd.RDD.withScope(RDD.scala:362)
at org.apache.spark.rdd.RDD.map(RDD.scala:369)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:74)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:84)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:86)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:88)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:90)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:92)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:94)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:96)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:98)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:100)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:102)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:104)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:106)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw$$iw.<init>(<console>:108)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw$$iw.<init>(<console>:110)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw$$iw.<init>(<console>:112)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw$$iw.<init>(<console>:114)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$read$$iw.<init>(<console>:116)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$eval$.$print$lzycompute(<console>:7)
at lineb8a1770bfabb4ce4a0bcef2d50888f54105.$eval$.$print(<console>:6)

我尝试了这个想法here,来创建一个对象包装器,但它仍然不起作用。

有什么想法吗?我的代码:

object Holder {
  def pretty() = {
    val prettyTime = new PrettyTimeParser()
    prettyTime
  }
}

object DateTimeParser {

  val NameMask = "DATETIME"

  case class dateParts(times: scala.collection.immutable.List[Date], text: String, line: Int, position: Int)

  def apply(emailBody: String): Seq[dateParts] = parseEmail(emailBody)

  def normalizeBody(emailBody: String): String = {
    val dates: Seq[dateParts] = parseEmail(emailBody)
    val dateStrings: Seq[String] = dates map (_.text)
    val dateMap: Map[String, String] = dateStrings.map((_, NameMask)).toMap

    dateMap.foldLeft(emailBody) { case (cur, (regex, _)) => cur.replaceAll(regex, NameMask) }
  }

  def parseEmail(emailBody: String): Seq[dateParts] = {
    val parsed: Seq[DateGroup] = Holder.pretty.parseSyntax(emailBody).asScala.toList
    parsed
      .map(curr => dateParts(curr.getDates.asScala.toList, curr.getText, curr.getLine, curr.getPosition))
  }
}

enter image description here

【问题讨论】:

  • 请出示您的 Spark 代码
  • @zsxwing,我正在通过 Databricks 运行,所以如果我目前正在运行的所有内容,我都附上了。
  • 我没有看到调用 Spark API 的代码。你确定吗?
  • 100% - databricks 内置了 spark(它是一个笔记本平台)。刚刚添加了一个截图
  • 截图就是我要问的。您能否将代码和整个堆栈跟踪粘贴到此处的屏幕截图中?

标签: java scala apache-spark serialization


【解决方案1】:

如果对象包含不可序列化的内容,则无法对其进行序列化。

当您必须使用您无法控制的非Serializable 类时,一种可能的解决方法是直接在您的闭包中实例化该类。

val normal =
  email.
    ...
    map(body => (body, DateTimeParser.normalizeBody(body, new PrettyTimeParser))).
    ...

要尽量减少对象创建,您可以在调用 mapPartitions 而不是 map 中创建它。

val normal =
  email.
    ...
    mapPartitions {
      bodies => 
        lazy val parser = new PrettyTimeParser
        for (body <- bodies) yield
          (body, DateTimeParser.normalizeBody(body, parser)))
    }.
    ...

另一种方法(如果类运行线程安全代码)可以是在闭包内部范围之外创建解析器,将其标记为@transient lazy val,然后在闭包中使用它,这样每个执行程序都会创建自己的。

@transient lazy val parser = new PrettyTimeParser

val normal =
  email.
    ...
    map(body => (body, DateTimeParser.normalizeBody(body, parser))).
    ...

在任何情况下,您都需要调整代码,以便将解析器作为参数:

object DateTimeParser {

  val NameMask = "DATETIME"

  case class dateParts(times: scala.collection.immutable.List[Date], text: String, line: Int, position: Int)

  def apply(emailBody: String): Seq[dateParts] = parseEmail(emailBody)

  def normalizeBody(emailBody: String, parser: PrettyTimeParser): String = {
    val dates: Seq[dateParts] = parseEmail(emailBody, parser)
    val dateStrings: Seq[String] = dates map (_.text)
    val dateMap: Map[String, String] = dateStrings.map((_, NameMask)).toMap

    dateMap.foldLeft(emailBody) { case (cur, (regex, _)) => cur.replaceAll(regex, NameMask) }
  }

  def parseEmail(emailBody: String, parser: PrettyTimeParser): Seq[dateParts] = {
    val parsed: Seq[DateGroup] = parser.parseSyntax(emailBody).asScala.toList
    parsed
      .map(curr => dateParts(curr.getDates.asScala.toList, curr.getText, curr.getLine, curr.getPosition))
  }
}

如果您遇到其他不可序列化的对象,请继续应用相同的方法,直到您成功为止。

【讨论】:

  • 这很有帮助,谢谢@stefanobaghino。所以听起来没有办法创建 PrettyTimeParser 的一个实例并将其序列化到多个节点?我想序列化的主要原因是提高运行时效率(如果创建 dateTimeParser 实例需要大量时间和计算能力)
  • 我明白您的意思,但不幸的是,如果您不拥有该库并且不能简单地将其标记为Serializable,则无法解决此问题。此外,在处理 GB/TB/PB 数据的工作中,考虑到序列化也有成本,为每个执行程序创建解析器可能不会浪费太多。
猜你喜欢
  • 2018-11-10
  • 1970-01-01
  • 2017-05-07
  • 2017-03-21
  • 1970-01-01
  • 2016-07-02
  • 2020-04-05
  • 2017-08-24
  • 1970-01-01
相关资源
最近更新 更多