【发布时间】:2018-09-27 01:41:35
【问题描述】:
我有一个数据框,它是从具有 512 列(所有浮点值)的镶木地板文件创建的。
我正在尝试计算我的数据帧中每一行到常量参考数组的欧几里得距离。
我的开发环境是 Zeppelin 0.7.3,带有 spark 2.1 和 Scala。这是我运行的 zeppelin 段落:
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.linalg.Vectors
//Create dataframe from parquet file
val filePath = "/tmp/vector.parquet/*.parquet"
val df = spark.read.parquet(filePath)
//Create assembler and vectorize df
val assembler = new VectorAssembler()
.setInputCols(df.columns)
.setOutputCol("features")
val training = assembler.transform(df)
//Create udf
val eucDisUdf = udf((features: Vector,
myvec:Vector)=>Vectors.sqdist(features, myvec))
//Cretae ref vector
val myScalaVec = Vectors.dense( Array.fill(512)(25.44859))
val distDF =
training2.withColumn("euc",eucDisUdf($"features",myScalaVec))
此代码为 eucDisUdf 调用提供以下错误:
error: type mismatch; found : org.apache.spark.ml.linalg.Vector
required: org.apache.spark.sql.Column
我很感激任何想法如何消除这个错误并在 scala 中正确计算距离。
【问题讨论】:
标签: scala apache-spark euclidean-distance