如何在 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()
这里 df 是DataFrame
。
【问题讨论】:
只要.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
在 Spark Scala 中将 RDD[(String, String, String)] 转换为 RDD[(String, (String, String))]
如何在 Spark Scala 中将 WrappedArray 转换为 List?