在UDF中使用MLUtils.convertVectorColumnsToML()?

时间:2017-10-27 04:43:20

标签: scala apache-spark apache-spark-mllib apache-spark-ml apache-spark-dataset

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

假设df为原始数据框,并且mllib向量的列名为mllibVector