2017-05-15 1 views
1

collecting (조치)없이 findSynonyms 작업을 사용하려고합니다. 다음은 그 예입니다. 벡터가 들어있는 DataFrame입니다.데이터 단어에 불꽃 word2vec 찾기 동의어

df.show() 

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

나는이 DataFramefindSynonyms를 사용하고 싶습니다. 시도 :

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

그러나 null 포인터 예외가 발생합니다. 그럼, 스파크가 중첩 된 변형이나 동작을 지원하지 않는다는 것을 배웠습니다. 한 가지 가능한 방법은 DataFrame을 수집하고 findSynonyms으로 실행하는 것입니다. DataFrame 레벨에서 어떻게이 작업을 수행 할 수 있습니까?

답변

0

정확하게 이해했다면 DataFrame의 각 행에 기능을 수행하려고합니다. 이를 위해 UDF (User Defined Function)를 선언 할 수 있습니다. 귀하의 경우에는 UDF가 벡터를 입력으로 사용합니다.

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

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

새로운 열 "synonymes"는 func 함수의 결과를 이용하여 생성한다.