我正在尝试使用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
级别执行此操作?
答案 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”。