Spark Scala:值的RDD的矢量数据帧

Spark Scala:值的RDD的矢量数据帧,scala,apache-spark,Scala,Apache Spark,我有一个spark数据帧,其中有一个向量: org.apache.spark.sql.DataFrame = [sF: vector] 我试图将其转换为RDD值: org.apache.spark.rdd.RDD[(Double, Double)] 但是,我无法正确地转换它。我试过: val m2 = m1.select($"sF").rdd.map{case Row(v1, v2) => (v1.toString.toDouble, v2.toString.toDouble)}

我有一个spark数据帧,其中有一个向量:

org.apache.spark.sql.DataFrame = [sF: vector]
我试图将其转换为RDD值:

org.apache.spark.rdd.RDD[(Double, Double)] 
但是,我无法正确地转换它。我试过:

val m2 = m1.select($"sF").rdd.map{case Row(v1, v2) => (v1.toString.toDouble, v2.toString.toDouble)}
它可以编译,但我得到一个运行时错误:

scala.MatchError: [[-0.1111111111111111,-0.2222222222222222]] (of class org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema) 
当我这样做时:

m2.take(10).foreach(println).

有什么地方我做错了吗?

假设您希望向量的前两个值出现在
sF
列中,那么这可能会起作用:

import org.apache.spark.mllib.linalg.Vector
val m2 = m1
  .select($"sF")
  .map { case Row(v: Vector) => (v(0), v(1)) }
您得到一个错误,因为当您执行
案例行(v1,v2)
时,它将与数据帧中的行内容不匹配,因为您希望每行有两个值(
v1
v2
),但只有一个:向量


注意:如果要执行
.map
操作,无需调用
.rdd

谢谢您的帮助。我得到一个错误:Any在v(2)调用时不接受参数。知道为什么吗?你的代码和我的完全一样吗?或者省略了
v:Vector
?显式
向量
类型必须存在。还有,别忘了导入。不,我包括了v:Vector部分,谢谢!我需要做导入。我用的是.Vector而不是.Vector。