scala - Scala:使用闭包时任务不可序列化
问题描述
因此,我对 Spark 和 Scala 相当陌生,据我了解,您应该能够将闭包传递给 map 函数并让它修改值,但是Task not serializable
在尝试此操作时出现错误。
我的代码如下:
// 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)
任何帮助将不胜感激
解决方案
尝试使用 val fun 而不是定义函数
val difference = (x:Int) => {x-mean}
当你def
用来定义一个函数时,Spark 会尝试序列化你拥有这个函数的对象。这通常会导致 TaskNotSerializable,因为该对象中可能存在不可序列化的内容(val 或 var)。
推荐阅读
- r - 从字符串中删除不需要的文本
- python - views.py 中的“SyntaxError:无效语法”
- java - JavaFX StackedBarChart 负条未显示
- wordpress - 如何在 wordpress api 上使用 post 和 get 方法创建自定义端点
- java - 在android上使用自适应阈值
- sql - 需要帮助以形成优化的更新 sql 查询
- linux - 无法使用 intel icc 和 intelmpi 编译 OpenFOAM v1912
- php - 如何从 wpdb 查询返回构建多维数组?
- java - 设置只包含 javac 的 JDK
- python - 如何使用带有 nltk.pos_tag() 函数的通用 POS 标签?