在spark窗口函数中聚合多个列

时间:2017-08-09 06:59:14

标签: scala apache-spark apache-spark-sql

我正在尝试聚合多个列。这是我的情景。

我有一个像TagID,ListnerID,Timestamp和RSSI_weightage这样的列。

我想为每个TagID选择最高的rssi_weightage。此外,我需要为上述关联选择最高的时间戳。

实施例

TagID,ListnerID,Timestamp,RSSI_Weightage
2,101,1496745906,90
3,102,1496745907,70
3,104,1496745906,80
2,101,1496745909,60
4,106,1496745908,60

My expected output

2,101,1496745909,90
3,104,1496745907,80
4,106,1496745908,60

解释

对于TagID 2,最高的rssi_weighatge是90.但是最新的时间戳是1496745909.这是我的第一行。我为所有tagID做了一件事。

以上是我的预期输出。我试过这样的。

val window = Window.partitionBy("tagShortID", "ListenerShortID").orderBy("RSSI_Weightage","Timestamp")
 val prox = averageDF.withColumn("rank", row_number().over(window)).where($"rank" === 1) 

但上述说法不正常。我得到的结果不正确。如果按顺序应用desc,它会抛出错误。

0 个答案:

没有答案