【问题标题】:select latest record from spark dataframe从 spark 数据框中选择最新记录
【发布时间】: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 的新手。

【问题讨论】:

    标签: apache-spark-sql


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 2018-10-26
      • 1970-01-01
      • 2021-05-16
      • 2014-02-01
      • 1970-01-01
      • 2021-09-30
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多