使用Spark ML时VectorUDT的问题



我正在编写一个UDAF,应用于类型为Vector (Spark .ml.linalg.Vector)的Spark数据框架列。我依赖spark.ml.linalg包,这样我就不必在数据框架和RDD之间来回切换。

在UDAF内部,我必须为输入、缓冲区和输出模式指定数据类型:

def inputSchema = new StructType().add("features", new VectorUDT())
def bufferSchema: StructType =
    StructType(StructField("list_of_similarities", ArrayType(new VectorUDT(), true), true) :: Nil)
override def dataType: DataType = ArrayType(DoubleType,true) 

VectorUDT是我将使用spark.mllib.linalg.Vector:https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/mllib/linalg/Vectors.scala

然而,当我试图从spark导入它。替换为:import org.apache.spark.ml.linalg.VectorUDT . ml我得到一个运行时错误(在构建期间没有错误):

class VectorUDT in package linalg cannot be accessed in package org.apache.spark.ml.linalg 

这是预期的吗/你能提出一个解决方案吗?

我使用Spark 2.0.0

在Spark 2.0.0中,正确的方法是使用org.apache.spark.ml.linalg.SQLDataTypes.VectorType而不是VectorUDT

相关内容

  • 没有找到相关文章

最新更新