Scala:使用闭包时任务无法序列化

时间:2020-11-03 01:24:17

标签: scala apache-spark runtime-error

因此,我对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)

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

请尝试使用val fun,而不是定义函数

val difference = (x:Int) => {x-mean}

当您使用def定义函数时,Spark会尝试序列化具有此功能的对象。这通常会导致TaskNotSerializable,因为该对象中可能存在无法序列化的内容(val或var)。

相关问题