关于从SQL.DataFrame中获取特殊对象方法
1 import spark.implicits._ 2 val df1=rdd.map(e=>{
3 a="label"
4 b=Arraybuff[String]("a","b","c")
5 c=Vectors.dense(0.2,0.5,0.6,0.8)
6 (a,b,c)
7 }).toDF("label","features","vector")
当我们想读取df1的vector时我们通过Debug查询发现这个格式是Vector类型,于是想当然就打算通过getAs方法获得该类型
df1.rdd.map(e=>{
val c=e.getAs("vector")[Vector]
})
发现虽然格式看起来的确变成Vector,但是你会发现如调用Vectors的Vectors.sqdist()方法时候显示格式Vector格式错误
正确方法应该在getAs方法后加入asInstanceOf方法
df1.rdd.map(e=>{ val c=e.getAs("vector").asInstanceOf[org.apache.spark.ml.linalg.Vector] val b=e.getAs("features").asInstanceOf[mutable.Seq[Double]] })
注意:
虽然Debug发现features的格式是Array[Double],但是asInstanceOf[Array[Double]]依旧报错,对此我们可以用
mutable.Seq[Double]来替代[Array[Double]

浙公网安备 33010602011771号