【问题标题】:Spark Scala: Vector Dataframe to RDD of valuesSpark Scala:向量数据帧到值的 RDD
【发布时间】:2016-05-11 08:29:39
【问题描述】:

我有一个包含向量的 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).

是不是我做错了什么?

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    假设您希望sF 列中存在向量的前两个值,也许这会起作用:

    import org.apache.spark.mllib.linalg.Vector
    val m2 = m1
      .select($"sF")
      .map { case Row(v: Vector) => (v(0), v(1)) }
    

    您收到一个错误,因为当您执行 case Row(v1, v2) 时,它不会匹配 DataFrame 中行的内容,因为您希望每行有两个值(v1v2),但是只有一个:一个向量。

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

    【讨论】:

    • 感谢您的帮助。我收到一个错误:Any 在 v(2) 调用中不接受参数。任何想法为什么?
    • 你的代码和我的完全一样吗?或者您省略了v: Vector?显式 Vector 类型必须存在。另外,不要忘记导入。
    • 不,我包括 v: Vector 部分
    • 谢谢!我需要进行导入。我使用的是 .Vectors 而不是 .Vector。
    猜你喜欢
    • 1970-01-01
    • 2021-06-02
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2016-11-04
    • 1970-01-01
    • 2015-10-31
    相关资源
    最近更新 更多