Параметр Spark scala в row.getDouble

У меня возникла очень интересная ошибка, когда я пытаюсь передать фрейм данных в 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

Но когда я набираю 0 и 1 в getDouble() вместо передачи параметров x и y, все в порядке.

              lines.map(row => (row.getDouble(0), row.getDouble(1))))

Хотя я исправил эту проблему, добавив метод выбора перед картой, мне очень любопытно, как это произошло. Любые идеи? Большое спасибо!


person XXXShao    schedule 10.05.2016    source источник
comment
x и y это String?   -  person axiom    schedule 11.05.2016


Ответы (1)


Row.getDouble(index: Int) принимает целочисленный индекс строки в качестве входных данных, а x и y определяются как String. Ваш код должен выдавать ошибку времени компиляции в row.getDouble(x), поскольку x является строкой. Скорее всего, вы используете какой-то ранее скомпилированный код.

person asymptote    schedule 11.05.2016