2016-08-16 15 views
4

Vector(spark.ml.linalg.Vector)型のSparkデータフレーム列に適用するUDAFを作成しています。私はspark.ml.linalgパッケージに依存しているので、データフレームとRDDの間を行き来する必要はありません。 UDAFインサイド Spark ML使用時のVectorUDTの問題

、私は入力、バッファのデータ型を指定する必要があり、出力スキーマ: https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/mllib/linalg/Vectors.scala

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で使用するものです しかし

、私が代わりに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でスパーク2.0.0

答えて

16

を使用しています

、行くための適切な方法は、org.apache.spark.ml.linalg.SQLDataTypes.VectorTypeの代わりVectorUDTを使用することです。それはthis issueで導入されました。

+0

これは受け入れられる回答である必要があります。 – zero323

関連する問題