scala - 如何在scala中获取groupBy未使用的每列的最大值
问题描述
df
对于我
用于 groupBy 操作的 spark 数据(col1, col2, col3)
框,即 ,等df.groupBy(col1, col2, col3)
中的其他列。那么我应该如何从每个组中获取最大值为 的表?我期待一些操作,如:df
col4
col5
col4
col5
(col1, col2, col3)
df.groupBy(col1, col2, col3).max(...)
结果应该看起来像
+---------+--------+---------+----+---+
|col1 |col2 |col3_max |col4_max|
+---------+--------+---------+----+---+
|1021 |a | . | . |
|1000 |b | . | . |
|1011 |c | . | . |
+---------+--------+---+----+---+-----+
解决方案
你所拥有的应该工作。我只是通过打开一个spark-shell
.
scala> val df = Seq((1,2,3,4,5,6), (1,2,3,9,3,2), (2,3,3,1,1,1).toDF("col1", "col2", "col3", "col4", "col5", "col6")
df: org.apache.spark.sql.DataFrame = [col1: int, col2: int ... 4 more fields]
scala> df.groupBy("col1", "col2", "col3").max("col4", "col5", "col6").show()
+----+----+----+---------+---------+---------+
|col1|col2|col3|max(col4)|max(col5)|max(col6)|
+----+----+----+---------+---------+---------+
| 2| 3| 3| 1| 1| 1|
| 1| 2| 3| 9| 5| 6|
+----+----+----+---------+---------+---------+
如果您想要所有列而不命名它们,您可以执行以下操作,但您需要过滤掉 col1、col2 和 col3 的最大值:
scala> df.groupBy("col1", "col2", "col3").max().show()
+----+----+----+---------+---------+---------+---------+---------+---------+
|col1|col2|col3|max(col1)|max(col2)|max(col3)|max(col4)|max(col5)|max(col6)|
+----+----+----+---------+---------+---------+---------+---------+---------+
| 2| 3| 3| 2| 3| 3| 1| 1| 1|
| 1| 2| 3| 1| 2| 3| 9| 5| 6|
+----+----+----+---------+---------+---------+---------+---------+---------+
推荐阅读
- excel - vba 选择特定的工作表并将创建的每个 PDF 保存/导出到不同的文件夹
- python - 估计偏度系数
- c++ - 具有参数和数组输入的构造函数不起作用c ++
- r - 基于阈值标记气泡图
- node.js - socket.io:cookie 未在初始连接时发送
- javascript - 如何在 MDBootstrap 中为 DataTables 使用异步 .update() 方法?
- javascript - 在无限循环中使用 Promise(不泄漏内存)
- c# - 安排 Windows 服务在每天凌晨 3:00 运行
- python - Scrapy 中的硒。如何在scrapy内运行for循环?
- flutter - 在 Flutter 中显示特定的 Firestore 文档