【问题标题】:Filter max number in Pyspark在 Pyspark 中过滤最大数量
【发布时间】:2021-03-30 09:14:11
【问题描述】:

有没有办法在 pyspark 中过滤并获得最大结果?我在下面尝试了这个,但它只能让我得到 rownum 小于 2 的行。

df2 = df.withColumn("rownum",row_number().over(Window.partitionBy("SID", "Start Date", "End Date").orderBy("SID"))).filter(col("rownum")<2).orderBy("SID").drop("rownum")

我在下面有这个数据框。

+--------+----------+----------+--------+--------- -+ |SID |开始日期 |结束日期 |CID |添加日期| +--------+----------+----------+--------+--------- -+ |1001 |2021-04-05|2021-04-05|1002 |2021-03-22| |1001 |2021-03-31|2021-03-31|1002 |2021-03-22| |1004 |2021-04-05|2021-04-05|1003 |2021-03-22| |1005 |2021-04-06|2021-04-06|1006 |2021-03-22| |1001 |2021-04-05|2021-04-05|1002 |2021-03-30| |1001 |2021-03-31|2021-03-31|1006 |2021-03-30| +--------+----------+----------+--------+--------- -+

这是我的预期结果。

+--------+----------+----------+--------+--------- -+ |SID |开始日期 |结束日期 |CID |添加日期| +--------+----------+----------+--------+--------- -+ |1004 |2021-04-05|2021-04-05|1003 |2021-03-22| |1005 |2021-04-06|2021-04-06|1006 |2021-03-22| |1001 |2021-04-05|2021-04-05|1002 |2021-03-30| |1001 |2021-03-31|2021-03-31|1006 |2021-03-30| +--------+----------+----------+--------+--------- -+

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql


    【解决方案1】:

    您的代码中的某些列名不存在,但我猜您可能想按CIDDate Added 列的降序排列,如果您想获得最新值:

    from pyspark.sql import functions as F, Window
    
    df2 = df.withColumn(
        "rownum", 
        F.row_number().over(
            Window.partitionBy("SID", "StartDate", "EndDate")
                  .orderBy(F.desc("CID"), F.desc("DateAdded"))
        )
    ).filter(F.col("rownum")<2).orderBy("DateAdded").drop("rownum")
    
    df2.show()
    +----+----------+----------+----+----------+
    | SID| StartDate|   EndDate| CID| DateAdded|
    +----+----------+----------+----+----------+
    |1005|2021-04-06|2021-04-06|1006|2021-03-22|
    |1004|2021-04-05|2021-04-05|1003|2021-03-22|
    |1001|2021-04-05|2021-04-05|1002|2021-03-30|
    |1001|2021-03-31|2021-03-31|1006|2021-03-30|
    +----+----------+----------+----+----------+
    

    【讨论】:

      猜你喜欢
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      相关资源
      最近更新 更多