2015-12-23 15 views
7

私はSpark 1.3を使用しています。Spark DataFrameの各行に機能を適用

データフレームの各行に関数を適用したいと思います。この関数は、行の各列をハッシュし、ハッシュのリストを返します。

dataframe.map(row => row.toSeq.map(col => col.hashCode)) 

このコードを実行すると、NullPointerExceptionが発生します。私はこれがSPARK-5063に関連していると仮定します。

ネストマップを使用せずに同じ結果を達成する方法は考えられません。

答えて

6

RDD変換をネストしていないため、これはSPARK-5063のインスタンスではありません。内部.map()がRDDではなくScala Seqに適用されています。

データセット内の一部の行にNULL列の値が含まれているため、コールの中には、null.hashCodeを評価しようとするとNullPointerExceptionsがスローされることがあります。この問題を回避するには、ハッシュコードを計算する際にnullを考慮する必要があります。あなたは、Java 7 JVM以上(source)上で実行している場合

には、Javaの以前のバージョンには、代わりに

import java.util.Objects 
dataframe.map(row => row.toSeq.map(col => Objects.hashCode(col))) 

を行うことができます

dataframe.map(row => row.toSeq.map(col => if (col == null) 0 else col.hashCode)) 
を行うことができます
関連する問題