2017-05-15 13 views
1

collecting(操作)なしでfindSynonyms操作を使用しようとしています。ここに例があります。私はベクトルを保持するDataFrameを持っています。データワードにスパムword2vec findSymonyms

df.show() 

+--------------------+ 
|    result| 
+--------------------+ 
|[-0.0081423431634...| 
|[0.04309031420520...| 
|[0.03857229948043...| 
+--------------------+ 

私はこのDataFramefindSynonymsを使いたいです。試しました

df.map{case Row(vector:Vector) => model.findSynonyms(vector)} 

nullポインタの例外がスローされます。それから、スパークはネストされた変換やアクションをサポートしていないことを学びました。可能な方法の1つは、DataFrameを収集してfindSynonymsを実行することです。 DataFrameレベルでこの操作を行うにはどうすればよいですか?

答えて

0

正しく理解している場合は、DataFrameの各行で機能を実行する必要があります。これを行うには、ユーザー定義関数(UDF)を宣言できます。あなたの場合、UDFはベクトルを入力として受け取ります。

import org.apache.spark.sql.functions._ 

val func = udf((vector: Vector) => {model.findSynonyms(vector)}) 
df.withColumn("synonymes", func($"result")) 

新しい列「synonymesは」func機能からの結果を使用して作成されます。