2017-10-04 11 views
0

スパーク・データ・フレームの2つのフィーチャ・カラム間の自乗距離を計算する必要があります。 org.apache.spark.sql.AnalysisException
メッセージ: 'UDF(機能、特長2)' を解決することはできませんが原因私は、次のコードスパーク・スケーラの二乗距離を計算する際の誤差

val udf_dist = funcs.udf((x:DenseVector, y:DenseVector) => Vectors.sqdist(x,y)) 
    val df6 = df5.withColumn("dist", udf_dist(funcs.col("features"), 
              funcs.col("features2"))) 

を実行すると、私はエラー

名を取得しますデータタイプの不一致:引数1 にはベクタータイプが必要ですが、 'features'はベクタータイプです。 引数2にはベクタータイプが必要ですが、features2はベクトル タイプです。

私はこのエラーを取得していますなぜ私のデータフレームのスキーマはまた、以下のコードは

val v1: org.apache.spark.mllib.linalg.Vector = Vectors.dense(5) 
val v2: org.apache.spark.mllib.linalg.Vector = Vectors.dense(5) 

Vectors.sqdist(v1, v2) 

罰金を

root 
|-- id: long (nullable = false) 
|-- features: vector (nullable = true) 
|-- id2: long (nullable = false) 
|-- features2: vector (nullable = true) 

を実行していますか?

答えて

2

デフォルトで2.0を使用した後のSpark SQL org.apache.spark.ml.linalg.Vectorではなく、org.apache.spark.mllib.linalg.Vectorです。またvector列を格納VectorsないDenseVectorsので、あなたは正しいスーパータイプを使用する必要があります

import org.apache.spark.ml.linalg.{Vector => MLVector, Vectors => MLVectors} 

funcs.udf((x: MLVector, y: MLVector) => MLVectors.sqdist(x,y)) 

または単純:

funcs.udf(MLVectors.sqdist _) 
関連する問題