【问题标题】:group by and picking up first value in spark sql [duplicate]分组并在spark sql中获取第一个值[重复]
【发布时间】:2017-12-25 16:39:45
【问题描述】:

我在 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的结果中,三个listner的rssi值相同。在这种情况下,我想选择第一行。

【问题讨论】:

  • 你要找的正是那个链接

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


【解决方案1】:

您可以使用 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|
+---+----------+----+-------+-------+------+----+

【讨论】:

    猜你喜欢
    • 2017-03-04
    • 2017-07-12
    • 2019-11-26
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    相关资源
    最近更新 更多