【问题标题】:How to order by multiple columns in pyspark如何在pyspark中按多列排序
【发布时间】:2021-05-13 15:01:05
【问题描述】:

我有一个数据框:-

Price   sq.ft   constructed
15000   800     22/12/2019
80000   1200    25/12/2019
90000   1400    15/12/2019
70000   1000    10/11/2019
80000   1300    24/12/2019
15000   950     26/12/2019

我想一次对多列进行排序,虽然我得到了结果,但我正在寻找更好的方法来做到这一点。以下是我的代码:-

df.select("*",F.row_number().over(
    Window.partitionBy("Price").orderBy(col("Price").desc(),col("constructed").desc())).alias("Value")).display()
Price   sq.ft   constructed Value
15000   950   26/12/2019    1
15000   800   22/12/2019    2
70000   1000    10/11/2019  1
80000   1200    25/12/2019  1
80000   1300    24/12/2019  2
90000   1400    15/12/2019  1

除了每次都重复col("column name").desc(),还有什么更好的方法吗? 我也尝试过以下方式:-

df.select("*",F.row_number().over(
    Window.partitionBy("Price").orderBy(["Price","constructed"],ascending = False).alias("Rank"))).display()

得到一个错误:-

TypeError: orderBy() got an unexpected keyword argument 'ascending'

【问题讨论】:

    标签: sorting pyspark sql-order-by multiple-columns


    【解决方案1】:

    您可以使用列表推导:

    from pyspark.sql import functions as F, Window
    
    Window.partitionBy("Price").orderBy(*[F.desc(c) for c in ["Price","constructed"]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多