#scala #apache-spark
Вопрос:
Проблемная функция приведена ниже. A NullPointerException
выбрасывается, когда breakdownValue
переменная проверяется null
.
def convertRowToLegacyDatapoint(row: Row, metric: String): MWSDatapoint = { val breakdowns = mutable.MutableList() for (col lt;- URL_TYPE_BREAKDOWNS) { val breakdownValue = row.getAs(col.name) /* This check throws a null pointer exception */ if (breakdownValue != null) { breakdowns = breakdownValue } } ... }
Функция предназначена для запуска внутри Spark UDF. Я проверил, что это не аномалия компиляции (заново построил весь проект и оценил код вручную).
Любопытная часть заключается в том, что если я установлю точку останова прямо перед строкой, которая создает исключение, и я проверю код вручную, то я больше не получу исключение. Это происходит только тогда, когда выполняется весь цикл for, который NullPointerException
выбрасывается в оператор if.
Комментарии:
1. Вы понимаете, что используете
getAs
, который также ожидаетType parameter
. Он извлекаетvalue
данные из столбцаRow
«s», а затем десериализует их в предоставленныйType
. Итак, чего еще вы ожидаете, когдаvalue
в этой колонке естьnull
?