Я пишу UDAF для применения к столбцу фрейма данных Spark типа Vector (spark.ml.linalg.Vector). Я полагаюсь на пакет spark.ml.linalg, так что мне не нужно идти туда и обратно между dataframe и RDD.Проблема с VectorUDT при использовании Spark ML
Внутри 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
Ожидается ли/предлагается ли вам обходной путь?
Я использую Спарк 2.0.0
Это должен быть принятый ответ. – zero323