当我尝试在类里面将数据帧传输到 RDD 时,我遇到了一个非常有趣的错误。
我构建了一个名为 ROC 的类,它看起来像这样:
class ROC(lines : DataFrame, x: Int, y: Int) {
private val metrics: BinaryClassificationMetrics =
new BinaryClassificationMetrics(
lines.map(row => (row.getDouble(x), row.getDouble(y))))
}
它给我一个错误
org.apache.spark.SparkException: Task not serializable
但是当我在 getDouble() 中键入 0 和 1 而不是传递参数 x 和 y 时,一切都很好。
lines.map(row => (row.getDouble(0), row.getDouble(1))))
虽然我已经通过在 map 之前添加 select 方法解决了这个问题,但我很好奇这是怎么发生的。有任何想法吗?非常感谢!
最佳答案
Row.getDouble(index : Int) 将行的整数索引作为输入,而 x 和 y 定义为字符串。您的代码应该在 row.getDouble(x) 处给出编译时错误,因为 x 是一个字符串。您可能正在运行一些以前编译过的代码。
关于scala - row.getDouble 中的 Spark scala 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37150505/