2017-10-04 3 views
0

스파크 데이터 프레임의 두 가지 기능 열 사이의 제곱 거리를 계산해야합니다. org.apache.spark.sql.AnalysisException
메시지 : 나는 다음과 같은 코드를 실행하면스파크 - 스칼라에서 제곱 거리를 계산하는 중 오류가 발생했습니다.

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"))) 

나는 오류를

이름 얻을 해결할 수없는 'UDF를 (기능, 특징 2)'에 의한 데이터 형식이 일치하지 않습니다 : 인수 1 에 벡터 형식이 필요하지만 'features'은 벡터 형식입니다. 인수 2에는 벡터 형식이 필요하지만 'features2'의 형식은 벡터 입니다. 나는이 오류를 받고 있어요 왜

내 dataframe의 스키마는 또한

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

이다, 코드는 아래

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) 

잘 실행?

답변

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 _) 
관련 문제