在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 ...
能否请您帮助我了解我在做什么错?
答案 0 :(得分:0)
在Google上搜寻时,发现这篇帖子为我提供了解决方案:Spark broadcasted variable returns NullPointerException when run in Amazon EMR cluster
最后,问题出在扩展应用