gpt4 book ai didi

scala - 分组并在 spark sql 中获取第一个值

转载 作者:行者123 更新时间:2023-12-01 07:25:53 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to select the first row of each group?

(9 个回答)


4年前关闭。




我在 spark sql 中按操作进行分组。因为某些行包含具有不同 ID 的相同值。在这种情况下,我想选择第一行。

这是我的代码。

    val highvalueresult = highvalue.select($"tagShortID", $"Timestamp", $"ListenerShortID", $"rootOrgID", $"subOrgID",  $"RSSI_Weight_avg")
.groupBy("tagShortID", "Timestamp").agg(max($"RSSI_Weight_avg")
.alias("RSSI_Weight_avg"))

val t2 = averageDF.join(highvalueresult, Seq("tagShortID", "Timestamp", "RSSI_Weight_avg"))

这就是我的结果。
tag,timestamp,rssi,listner,rootorg,suborg
2,1496745906,0.7,3878,4,3
4,1496745907,0.6,362,4,3
4,1496745907,0.6,718,4,3
4,1496745907,0.6,1901,4,3

在上面的结果中,三个监听器的时间戳 1496745907 的 rssi 值相​​同。在这种情况下,我想选择第一行。

最佳答案

您可以使用 spark sql 上下文具有的窗口函数支持
假设您的数据框是:

+---+----------+----+-------+-------+------+
|tag| timestamp|rssi|listner|rootorg|suborg|
+---+----------+----+-------+-------+------+
| 2|1496745906| 0.7| 3878| 4| 3|
| 4|1496745907| 0.6| 362| 4| 3|
| 4|1496745907| 0.6| 718| 4| 3|
| 4|1496745907| 0.6| 1901| 4| 3|
+---+----------+----+-------+-------+------+

将窗口函数定义为(您可以按列进行分区/排序):
val window = Window.partitionBy("timestamp", "rssi").orderBy("timestamp")

应用窗口函数:
res1.withColumn("rank", row_number().over(window))
+---+----------+----+-------+-------+------+----+
|tag| timestamp|rssi|listner|rootorg|suborg|rank|
+---+----------+----+-------+-------+------+----+
| 4|1496745907| 0.6| 362| 4| 3| 1|
| 4|1496745907| 0.6| 718| 4| 3| 2|
| 4|1496745907| 0.6| 1901| 4| 3| 3|
| 2|1496745906| 0.7| 3878| 4| 3| 1|
+---+----------+----+-------+-------+------+----+

从每个窗口中选择第一行
    res5.where($"rank" === 1)
+---+----------+----+-------+-------+------+----+
|tag| timestamp|rssi|listner|rootorg|suborg|rank|
+---+----------+----+-------+-------+------+----+
| 4|1496745907| 0.6| 362| 4| 3| 1|
| 2|1496745906| 0.7| 3878| 4| 3| 1|
+---+----------+----+-------+-------+------+----+

关于scala - 分组并在 spark sql 中获取第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45206976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com