我正在尝试在没有collecting
(操作(的情况下使用findSynonyms
操作。下面是一个示例。我有一个保存向量的DataFrame
。
df.show()
+--------------------+
| result|
+--------------------+
|[-0.0081423431634...|
|[0.04309031420520...|
|[0.03857229948043...|
+--------------------+
我想在这个DataFrame
上使用findSynonyms
.我试过了
df.map{case Row(vector:Vector) => model.findSynonyms(vector)}
但它会引发空指针异常。然后我了解到,Spark不支持嵌套转换或操作。一种可能的方法是收集此DataFrame
然后运行findSynonyms
。如何在DataFrame
级别执行此操作?
如果我
理解正确,您想对DataFrame
中的每一行执行一个功能。为此,您可以声明用户定义函数 (UDF(。在您的情况下,UDF 将采用向量作为输入。
import org.apache.spark.sql.functions._
val func = udf((vector: Vector) => {model.findSynonyms(vector)})
df.withColumn("synonymes", func($"result"))
将使用func
函数的结果创建一个新列"同义词"。