在 UDF 中使用 MLUtils.convertVectorColumnsToML()?

Using MLUtils.convertVectorColumnsToML() inside a UDF?

我有一个 Dataset/Dataframe,其中一个列是 mllib.linalg.Vector(双打)。我想向此数据集添加另一列 ml.linalg.Vector 类型的数据集(因此我将拥有两种类型的 Vectors)。原因是我正在评估一些算法,其中一些期望 mllib 向量,一些期望 ml 向量。另外,我必须将一种算法的 o/p 提供给另一种算法,并且每种算法都使用不同的类型。

有人可以帮我将 mllib.linalg.Vector 转换为 ml.linalg.Vector 并将新列附加到手头的数据集中。我尝试在 UDF 和常规函数中使用 MLUtils.convertVectorColumnsToML(),但无法使其正常工作。我试图避免创建一个新的数据集,然后进行内部连接并删除列,因为数据集最终会很大并且连接很昂贵。

您可以使用方法 toMLmllib 向量转换为 ml 向量。 UDF 和用法示例如下所示:

val convertToML = udf((mllibVec: org.apache.spark.mllib.linalg.Vector) = > {
  mllibVec.asML
})

val df2 = df.withColumn("mlVector", convertToML($"mllibVector"))

假设 df 是原始数据框,具有 mllib 向量的列被命名为 mllibVector.