一.常见分析
在Spark 机器学习中,Vector向量和Metricx矩阵是最常用的两种数据类型。特别是Vector向量类型,在使用Vector向量类型时,默认是不会导入Spark定义的Vector类型的。默认使用scala.collection.immutable.Vector
,此时使用Spark ml算法就会报类型异常。
代码:
val (meanVal, varianceVal) = df.select(metrics("mean", "variance").summary($"features", $"weight").as("summary"))
.select("summary.mean", "summary.variance")
.as[(Vector, Vector)]
.first()
异常信息:
Error:(31, 9) constructor cannot be instantiated to expected type;
found : (T1, T2)
required: (Vector, Vector)
val (meanVal, varianceVal) = df.select(metrics("mean", "variance").summary($"features", $"weight").as("summary"))
^
二.解决方案
导入对应的spark包Vector向量即可。
-
使用ml算法
import org.apache.spark.ml.linalg.Vector
-
使用mllib算法
import org.apache.spark.mllib.linalg.Vector