如何在 Scala 中将 RDD 转换为二维数组?

Posted

技术标签:

【中文标题】如何在 Scala 中将 RDD 转换为二维数组?【英文标题】:How to convert an RDD into a 2d array in Scala? 【发布时间】: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。 【参考方案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

【讨论】:

以上是关于如何在 Scala 中将 RDD 转换为二维数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 scala 中将 RDD[(int, string)] 转换为 Dataframe

在scala中将Spark Dataframe转换为RDD

在 Spark Scala 中将 RDD[(String, String, String)] 转换为 RDD[(String, (String, String))]

如何在 Spark Scala 中将 WrappedArray 转换为 List?

如何对 spark scala RDD 中的元组列表/数组执行转换?

如何在Java中将二维布尔数组转换为一维字节数组?