Как проверка null в Scala может привести к исключению NullPointerException?

#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 ?