【发布时间】:2019-12-29 22:17:40
【问题描述】:
我在 spark scala 中有一个 df,我需要根据第二列中的 DateTime 进行 groupBy id 和排序,并且只取每个组的前 5 行
------------------------------------
|id| DateTime |
------------------------------------
|340054675199675|15-01-2018 19:43:23|
|340054675199675|15-01-2018 10:56:43|
|340028465709212|10-01-2018 02:47:11|
|340054675199675|09-01-2018 10:59:10|
|340028465709212|02-01-2018 03:25:35|
|340054675199675|28-12-2017 05:48:04|
|340054675199675|21-12-2017 15:47:51|
|340028465709212|18-12-2017 10:33:04|
|340028465709212|16-12-2017 19:55:40|
|340028465709212|16-12-2017 19:55:40|
|340028465709212|12-12-2017 07:04:51|
|340054675199675|06-12-2017 08:52:38|
------------------------------------
val dfTop = df.withColumn("rn", row_number.over(w)).where($"rn" === 10).drop("rn")
val dfMax = df.groupBy($"id".as("grouped_id")).agg(first($"DateTime").as("max_value")).limit(10)
val dfTopByJoin = df.join(broadcast(dfMax),
($"id" === $"grouped_id") && ($"DateTime" === $"max_value"))
【问题讨论】:
-
您是否在使用 spark 流式传输 [给定标签]?
-
是的,我将从流媒体中获取这些数据
-
是 Dstreams 还是结构化流式传输?
-
结构化。但截至目前,我更感兴趣的是对上面的 df 进行排序。
-
为什么不这样做: val w= Window.partitionBy("id") val dfTop = df.withColumn("rn", row_number.over(w)).where($ "rn"
标签: scala apache-spark apache-spark-sql spark-streaming