scala - 如何在 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"))
解决方案
您可以执行以下类似操作
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)]
推荐阅读
- symfony4 - Modernizr 插件和 webpack 安可
- kubernetes - Kubernetes 中的有状态作业
- android - 可以对大数据对象使用共享首选项吗?
- html - 如何在不影响其他 div 元素位置的情况下覆盖 div
- java - 我无法使用休眠本地会话工厂对象更新特定行的“shop_table”表值?
- c# - 视频和aufio文件的实际时长
- node.js - AWS Custom Authorizer 不工作,返回请求超时
- python - 在python中使用re模块时,使用\S$匹配得到的结果会丢失字符串中的最后一个元素
- sql - SSIS · 如果条件满足则停止数据流
- java - 如何将已编译的 C 代码添加到 android studio 项目中?