如何解决Scala:使用闭包时任务无法序列化
因此,我对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,and Mean
println("Count: " + count)
println("Sum: " + sum)
println("Mean: " + mean)
val difference = (x:Int) => {x - mean}
var differences = RDD.map(difference)
任何帮助将不胜感激
解决方法
请尝试使用val fun,而不是定义函数
val difference = (x:Int) => {x-mean}
当您使用def
定义函数时,Spark会尝试序列化具有此功能的对象。这通常会导致TaskNotSerializable,因为该对象中可能存在无法序列化的内容(val或var)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。