使用 Spark ML 时 VectorUDT 出现问题
Issue with VectorUDT when using Spark ML
我正在编写一个 UDAF 以应用于 Vector 类型的 Spark 数据框列 (spark.ml.linalg.Vector)。我依赖 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.ml 导入它时:import org.apache.spark.ml.linalg.VectorUDT
我收到运行时错误(构建期间没有错误):
class VectorUDT in package linalg cannot be accessed in package org.apache.spark.ml.linalg
expected/can 您是否提出了解决方法?
我正在使用 Spark 2.0.0
在 Spark 2.0.0 中,正确的做法是使用 org.apache.spark.ml.linalg.SQLDataTypes.VectorType
而不是 VectorUDT
。它是在 this issue.
中引入的
我正在编写一个 UDAF 以应用于 Vector 类型的 Spark 数据框列 (spark.ml.linalg.Vector)。我依赖 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.ml 导入它时:import org.apache.spark.ml.linalg.VectorUDT
我收到运行时错误(构建期间没有错误):
class VectorUDT in package linalg cannot be accessed in package org.apache.spark.ml.linalg
expected/can 您是否提出了解决方法?
我正在使用 Spark 2.0.0
在 Spark 2.0.0 中,正确的做法是使用 org.apache.spark.ml.linalg.SQLDataTypes.VectorType
而不是 VectorUDT
。它是在 this issue.