如何在 Scala 中将 RDD 转换为二维数组?
How to convert an RDD into a 2d array in Scala?
我正在为一个项目使用 Apache Spark。我有一个DataFrame
。我已经能够将它转换成 RDD
。我需要将其转换为 2d 数组。下面是我写的代码。接下来我该做什么?
val x: List[List[String]] = df.select(columnNames(0), (columnNames.drop(1): _*)).rdd.collect()
这里df是DataFrame
.
在聊天中讨论了您的问题后,这里是解决方案:
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
我正在为一个项目使用 Apache Spark。我有一个DataFrame
。我已经能够将它转换成 RDD
。我需要将其转换为 2d 数组。下面是我写的代码。接下来我该做什么?
val x: List[List[String]] = df.select(columnNames(0), (columnNames.drop(1): _*)).rdd.collect()
这里df是DataFrame
.
在聊天中讨论了您的问题后,这里是解决方案:
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