我是Spark的初学者,有没有办法在同一个窗口上为两个不同的列应用多个聚集函数?在我的例子中,我想应用concat和max
我有一个这样的数据集(DS1)。
+-----+--------------+---------+--------------+
|Col_1|Col_2 | Col_3 + Col_4 |
+-----+--------------+---------+--------------+
| 1 | aa |10 + test_1_1 +
| 1 | bb |20 + test_1_2 +
| 2 | cc |30 + test_2_1 +
| 2 | dd |40 + test_2_2 +
我想得到这样的东西(DS2)
+-----+--------------+---------+--------------+--------
|Col_1|Col_2 | Col_3 + Col_5 |
+-----+--------------+---------+----------------------+
| 1 | bb |20 + test_1_2;test_1_1 +
| 2 | dd |40 + test_2_2;test_2_1 +
------|--------------|---------+----------------------+
我知道如何在窗口上应用max函数,但如何添加串联以获得数据集DS2
val partitionColumns = Seq(
"Col_1"
)
df.withColumn(
"max_Col_3",
max(col("Col_3")) over Window
.partitionBy(
partitionColumns .map(col): _*
)
)
.filter(col("max_Col_3").equalTo(col("Col_3")))
.drop("max_Col_3")
1条答案
按热度按时间jyztefdp1#
您可以使用sql expr来分别取得
col2
、col3
、col5
。