row.getDouble中的Spark scala参数

时间:2016-05-10 23:22:35

标签: scala apache-spark spark-dataframe

当我尝试将数据帧传输到我班级的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方法解决了这个问题,但我很好奇这是怎么发生的。有任何想法吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

Row.getDouble(index:Int)将行的整数索引作为输入,而x和y定义为String。您的代码应该在row.getDouble(x)处给出编译时错误,因为x是一个String。您可能正在运行一些以前编译的代码。