【发布时间】:2018-01-16 22:17:13
【问题描述】:
我正在尝试聚合多个列。这是我的场景。
我有这样的列 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,则会引发错误。
【问题讨论】:
-
你描述的和你的预期输出不匹配
-
好吧可能是我描述错误。但我的预期输出是正确的。
-
对于最高的
RSSI_weightage,时间戳为1496745906。你的预期结果在哪里?我不明白你在用你的时间戳做什么。 -
这就是逻辑。如果我得到最高的 Rssi_weighatge,那么我还需要检查关联的最新时间戳
-
这就是为什么我在第一行提到 1496745909 时间戳
标签: scala apache-spark apache-spark-sql