首页 > 解决方案 > 如何在 Spark Dataframe 上应用转换来生成元组?

问题描述

我在 Spark Scala 中有以下 sampleDF DataFrame:

+-------+--------+------------------
|col1   |    col2|             col3|
+-------+--------+------------------
|    200|20200218|batched-202002180|
|    207|20200218|batched-202002190|
+-------+--------+------------------

现在我正在收集在 Spark 中执行以下操作的单个 col 的值:它给出了以下 o/p:

scala> val result = newDF.select("col3").collect.map(row => row(0).toString)
result: Array[String] = Array(batched-202002180, batched-202002190)

现在,我如何还选择其他两列 col1 和 col2 并将所有三列收集为元组数组?为简洁起见,我在上面的 DF 中只显示了 3 个列。我们可以预期会有超过 3 个 cols。

预期输出:

Array((200, 20200218, "batched-202002180"), (207, 20200218, "batched-202002190"))

标签: scaladataframeapache-sparkapache-spark-sql

解决方案


您可以执行以下类似操作

newDF.map(r => (r.getAs[Long](0),r.getAs[Long](1),r.getAs[String](2))).collect()

会给你Array[(Long, Long, String)]

如果要转换为字符串,可以使用

val result = newDF.select(cols.head, cols.tail: _*).map(r => (r.getLong(0).toString,r.getLong(1).toString,r.getString(2))).collect()

会给你Array[(String, String, String)]


推荐阅读