Spark Scala:值的RDD的矢量数据帧
我有一个spark数据帧,其中有一个向量: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)}
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。