从 spark 数据框中选择最新记录
Posted
技术标签:
【中文标题】从 spark 数据框中选择最新记录【英文标题】:select latest record from spark dataframe 【发布时间】:2019-04-10 14:57:56 【问题描述】:我的 DataDrame 是这样的:
+-------+---------+
|email |timestamp|
+-------+---------+
|x@y.com| 1|
|y@m.net| 2|
|z@c.org| 3|
|x@y.com| 4|
|y@m.net| 5|
| .. | ..|
+-------+---------+
对于每封电子邮件,我都想保留最新记录,因此结果将是:
+-------+---------+
|email |timestamp|
+-------+---------+
|x@y.com| 4|
|y@m.net| 5|
|z@c.org| 3|
| .. | ..|
+-------+---------+
我该怎么做?我是 spark 和 dataframe 的新手。
【问题讨论】:
【参考方案1】:这是一个通用的 ANSI SQL 查询,应该可以与 Spark SQL 一起使用:
SELECT email, timestamp
FROM
(
SELECT t.*, ROW_NUMBER() OVER (PARTITION BY email ORDER BY timestamp DESC) rn
FROM yourTable t
) t
WHERE rn = 1;
对于 PySpark 数据帧代码,请尝试以下操作:
from pyspark.sql.window import Window
df = yourDF
.withColumn("rn", F.row_number()
.over(Window.partitionBy("email")
.orderBy(F.col("timestamp").desc())))
df = df.filter(F.col("rn") == 1).drop("rn")
df.show()
【讨论】:
以上是关于从 spark 数据框中选择最新记录的主要内容,如果未能解决你的问题,请参考以下文章