org.json4s使用scala在Spark上的映射器中的序列化问题

时间:2015-08-17 23:56:29

标签: json scala serialization apache-spark json4s

我在序列化我的课程时遇到问题,以便在地图流程中将其发送给工作人员。我在spark 1.4上使用json4s

我发现了以下与之相关的问题 NotSerializableException with json4s on SparkSpark non-serializable exception when parsing JSON with json4s

我尝试了答案中的建议,但我仍然没有让我的代码运行。任何帮助将不胜感激。

import org.json4s._
import org.json4s.native.JsonMethods._
import org.json4s.native.Serialization

// define class for Url ITems
case class Url(url: String, content: List[String])

// Serialize Url Class
implicit val formats = Serialization.formats(ShortTypeHints(List(classOf[Url])))
// Function that parses JSON
val get_url = (line: String) => {
  val json = parse(line)
  json.extract[Url]
}    

val contents = url_contents.map(line => get_url(line))

当我在地图任务中使用格式运行时,结果没有区别

val contents = url_contents.map(line =>
{    
    implicit val formats = Serialization.formats(ShortTypeHints(List(classOf[Url]))); 
    get_url(line)
})

这是我收到的错误消息

org.apache.spark.SparkException: Task not serializable
    at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:315)
    at org.apache.spark.util.ClosureCleaner$.org$apache$spark$util$ClosureCleaner$$clean(ClosureCleaner.scala:305)
    at org.apache.spark.util.ClosureCleaner$.clean(ClosureCleaner.scala:132)
    at org.apache.spark.SparkContext.clean(SparkContext.scala:1891)
    at org.apache.spark.rdd.RDD$$anonfun$map$1.apply(RDD.scala:294)
    at org.apache.spark.rdd.RDD$$anonfun$map$1.apply(RDD.scala:293)
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:147)
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:108)
    at org.apache.spark.rdd.RDD.withScope(RDD.scala:286)
    at org.apache.spark.rdd.RDD.map(RDD.scala:293)
Caused by: java.io.NotSerializableException: org.json4s.DefaultFormats$
Serialization stack:
    - object not serializable (class: org.json4s.DefaultFormats$, value: org.json4s.DefaultFormats$@39f1b590)
    - field (class: line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC$$iwC$$iwC$$iwC, name: formats, type: class org.json4s.DefaultFormats$)
    - object (class line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC$$iwC$$iwC$$iwC, line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC$$iwC$$iwC$$iwC@244790d)
    - field (class: line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC$$iwC$$iwC, name: $iw, type: class line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC$$iwC$$iwC$$iwC)
    - object (class line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC$$iwC$$iwC, line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC$$iwC$$iwC@3d138764)
    - field (class: line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC$$iwC, name: $iw, type: class line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC$$iwC$$iwC)
    - object (class line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC$$iwC, line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC$$iwC@3835c32)
    - field (class: line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC, name: $iw, type: class line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC$$iwC)
    - object (class line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC, line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC@87bad40)
    - field (class: line86766ced366e45e095dc4be2c0d50ff812.$read, name: $iw, type: class line86766ced366e45e095dc4be2c0d50ff812.$read$$iwC)
    - object (class line86766ced366e45e095dc4be2c0d50ff812.$read, line86766ced366e45e095dc4be2c0d50ff812.$read@24a1c141)
    - field (class: line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC, name: $VAL77, type: class line86766ced366e45e095dc4be2c0d50ff812.$read)
    - object (class line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC, line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC@4b3c9766)
    - field (class: line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC, name: $iw, type: class line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC)
    - object (class line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC, line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC@7b9f33a3)
    - field (class: line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC$$iwC, name: $iw, type: class line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC)
    - object (class line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC$$iwC, line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC$$iwC@220e530b)
    - field (class: line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC, name: $iw, type: class line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC$$iwC)
    - object (class line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC, line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC@3988fd25)
    - field (class: line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC, name: $iw, type: class line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC$$iwC)
    - object (class line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC, line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC@1ab99b4)
    - field (class: line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC, name: $iw, type: class line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC$$iwC)
    - object (class line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC, line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC@3895db40)
    - field (class: line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC, name: $iw, type: class line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC$$iwC)
    - object (class line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC, line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC@403bb82c)
    - field (class: line86766ced366e45e095dc4be2c0d50ff825.$read, name: $iw, type: class line86766ced366e45e095dc4be2c0d50ff825.$read$$iwC)
    - object (class line86766ced366e45e095dc4be2c0d50ff825.$read, line86766ced366e45e095dc4be2c0d50ff825.$read@4c3ec106)
    - field (class: line86766ced366e45e095dc4be2c0d50ff830.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC, name: $VAL123, type: class line86766ced366e45e095dc4be2c0d50ff825.$read)
    - object (class line86766ced366e45e095dc4be2c0d50ff830.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC, line86766ced366e45e095dc4be2c0d50ff830.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC@22f99011)
    - field (class: line86766ced366e45e095dc4be2c0d50ff830.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC, name: $outer, type: class line86766ced366e45e095dc4be2c0d50ff830.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC)
    - object (class line86766ced366e45e095dc4be2c0d50ff830.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC, line86766ced366e45e095dc4be2c0d50ff830.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC@1145ee7)
    - field (class: line86766ced366e45e095dc4be2c0d50ff830.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$anonfun$1, name: $outer, type: class line86766ced366e45e095dc4be2c0d50ff830.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC)
    - object (class line86766ced366e45e095dc4be2c0d50ff830.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$anonfun$1, <function1>)
    at org.apache.spark.serializer.SerializationDebugger$.improveException(SerializationDebugger.scala:40)
    at org.apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala:47)
    at org.apache.spark.serializer.JavaSerializerInstance.serialize(JavaSerializer.scala:81)
    at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:312)
    at org.apache.spark.util.ClosureCleaner$.org$apache$spark$util$ClosureCleaner$$clean(ClosureCleaner.scala:305)
    at org.apache.spark.util.ClosureCleaner$.clean(ClosureCleaner.scala:132)
    at org.apache.spark.SparkContext.clean(SparkContext.scala:1891)
    at org.apache.spark.rdd.RDD$$anonfun$map$1.apply(RDD.scala:294)
    at org.apache.spark.rdd.RDD$$anonfun$map$1.apply(RDD.scala:293)
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:147)
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:108)
    at org.apache.spark.rdd.RDD.withScope(RDD.scala:286)
    at org.apache.spark.rdd.RDD.map(RDD.scala:293)

有关如何序列化我的类URL的任何想法和建议,以便将其分发给工作人员?

谢谢你,最好 卡尔文

0 个答案:

没有答案