【问题标题】:How to convert an RDD into a 2d array in Scala?如何在 Scala 中将 RDD 转换为二维数组?
【发布时间】:2016-02-01 05:30:46
【问题描述】:

我正在为一个项目使用 Apache Spark。我有一个DataFrame。我已经能够将其转换为RDD。我需要将它转换成一个二维数组。下面是我写的代码。接下来我该怎么做?

val x: List[List[String]] = df.select(columnNames(0), (columnNames.drop(1): _*)).rdd.collect()

这里 dfDataFrame

【问题讨论】:

  • 只要.collect(),如果我正确理解您的问题。 def collect(): Array[T] Return an array that contains all of the elements in this RDD.
  • 类型不匹配;找到:Array[org.apache.spark.sql.Row] 需要:scala.collection.mutable.List[List[String]]
  • 我收到此错误。
  • 编辑您的问题以包含给出错误的代码。我猜你不会在 RDD 上调用 collect
  • 不,我在 RDD 上使用 collect。

标签: scala apache-spark apache-spark-sql rdd


【解决方案1】:

在聊天中讨论您的问题后,这里是解决方案:

val x : List[List[String]] = df.select(columnNames.head, columnNames.tail: _*).
                             rdd.map{ case r : Row => 
                               Row(r.getAs[Long](0).toString,r.getAs[Long](1).toString,r.getAs[String](2)).toSeq.map(v => v.asInstanceOf[String]).toList
                             }.collect.toList

由于我没有实际数据的视图,请记住这是一个示例,您可以通过字段名称获取所需的列。 例如:r.getAs[String]("column1")

另一个我不太喜欢的解决方案是:

val x : List[List[String]] = df.select(columnNames.head, columnNames.tail: _*).
                             rdd.map{ case r : Row => 
                               r.mkString(",").split(",").toList
                             }.collect.toList

【讨论】:

    猜你喜欢
    • 2018-11-08
    • 2020-10-04
    • 2015-12-08
    • 1970-01-01
    • 2011-07-05
    • 2019-07-09
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多