因此,我对Spark和Scala还是相当陌生,据我所知,您应该能够将闭包传递给map函数,并让其修改值,但是尝试此操作时出现Task not serializable
错误。 / p>
我的代码如下:
// Spark Context
val sparkContext = spark.sparkContext
val random = scala.util.Random
// RDD Initialization
val array = Seq.fill(500)(random.nextInt(51))
val RDD = sc.parallelize(array)
// Spark Operations for Count, Sum, and Mean
var count = RDD.count()
var sum = RDD.reduce(_+_)
val mean = sum / count;
//Output Count, Sum, and Mean
println("Count: " + count)
println("Sum: " + sum)
println("Mean: " + mean)
val difference = (x:Int) => {x - mean}
var differences = RDD.map(difference)
任何帮助将不胜感激
答案 0 :(得分:1)
请尝试使用val fun,而不是定义函数
val difference = (x:Int) => {x-mean}
当您使用def
定义函数时,Spark会尝试序列化具有此功能的对象。这通常会导致TaskNotSerializable,因为该对象中可能存在无法序列化的内容(val或var)。