Spark word2vec在Dataframes上查找同义词

时间:2017-05-15 16:25:41

标签: scala apache-spark

我正在尝试使用findSynonyms操作而不使用collecting(操作)。这是一个例子。我有一个DataFrame来保存矢量。

df.show()

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

我想在此findSynonyms上使用DataFrame。我试过了

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

但它抛出空指针异常。然后我才知道,spark不支持嵌套转换或动作。一种可能的方法是收集此DataFrame然后运行findSynonyms。如何在DataFrame级别执行此操作?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您想在DataFrame的每一行上执行一项功能。为此,您可以声明用户定义函数(UDF)。在您的情况下,UDF将采用向量作为输入。

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

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

将使用func函数的结果创建新列“synonymes”。