当我尝试将数据帧传输到我班级的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方法解决了这个问题,但我很好奇这是怎么发生的。有任何想法吗?非常感谢!
答案 0 :(得分:1)
Row.getDouble(index:Int)将行的整数索引作为输入,而x和y定义为String。您的代码应该在row.getDouble(x)处给出编译时错误,因为x是一个String。您可能正在运行一些以前编译的代码。