Применить функцию к каждой строке фрейма данных Spark
Я на Spark 1.3.
Я хотел бы применить функцию к каждой строке фрейма данных. Эта функция хэширует каждый столбец строки и возвращает список хэшей.
dataframe.map(row => row.toSeq.map(col => col.hashCode))
Я получаю исключение NullPointerException при запуске этого кода. Я предполагаю, что это связано с Искра-5063.
Я не могу придумать способ, чтобы достичь того же результата без использования вложенной карте.
1 ответов
это не экземпляр SPARK-5063, потому что вы не вкладываете преобразования RDD; внутренний .map()
применяется к Scala Seq
, не RDD.
моя догадка заключается в том, что некоторые строки в наборе данных содержат значения null столбца, поэтому col.hashCode
вызовы бросают NullPointerExceptions, когда вы пытаетесь оценить null.hashCode
. Чтобы обойти это, вам нужно учитывать нули при вычислении хэш-кодов.
если вы работаете на Java 7 JVM или выше (источник), вы можете сделать
import java.util.Objects
dataframe.map(row => row.toSeq.map(col => Objects.hashCode(col)))
кроме того, на более ранних версиях Java вы можете сделать
dataframe.map(row => row.toSeq.map(col => if (col == null) 0 else col.hashCode))