Spark中的案例类序列化

时间:2018-07-06 10:15:41

标签: serialization apache-spark-sql case-class

在Spark应用程序(Spark 2.1)中,我试图将案例类作为要在执行程序上运行的函数的输入参数

object TestJob extends App {

  val appName = "TestJob"
  val out = "out"
  val p = Params("my-driver-string")

  val spark = SparkSession.builder()
    .appName(appName)
    .getOrCreate()
  import spark.implicits._

  (1 to 100).toDF.as[Int].flatMap(i => Dummy.process(i, p))
    .write
    .option("header", "true")
    .csv(out)
}

object Dummy {

  def process(i: Int, v:Params): Vector[String] = {
    Vector { if( i % 2 == 1) v + "_odd" else v + "_even" }
  }
}

case class Params(v: String)

当我使用master local [*]运行它时,一切运行良好,而在集群中运行时,Params类状态没有被序列化,并且输出结果为 _even _odd ...

能否请您帮助我了解我在做什么错?

1 个答案:

答案 0 :(得分:0)

在Google上搜寻时,发现这篇帖子为我提供了解决方案:Spark broadcasted variable returns NullPointerException when run in Amazon EMR cluster

最后,问题出在扩展应用