Spark DataFrame组按降序排序(pyspark)


88

我正在使用pyspark(Python 2.7.9 / Spark 1.3.1)并有一个数据框GroupObject,我需要按降序对其进行过滤和排序。试图通过这段代码来实现。

group_by_dataframe.count().filter("`count` >= 10").sort('count', ascending=False)

但这会引发以下错误。

sort() got an unexpected keyword argument 'ascending'

Answers:


165

在PySpark 1.3中,sort方法不采用升序参数。您可以改用descmethod:

from pyspark.sql.functions import col

(group_by_dataframe
    .count()
    .filter("`count` >= 10")
    .sort(col("count").desc()))

desc功能:

from pyspark.sql.functions import desc

(group_by_dataframe
    .count()
    .filter("`count` >= 10")
    .sort(desc("count"))

两种方法均可在Spark> = 1.3(包括Spark 2.x)下使用。



22

到目前为止,最方便的方法是使用此方法:

df.orderBy(df.column_name.desc())

不需要特殊的进口。


感谢丹尼尔Haviv的在Databricks一个解决方案架构师谁发现我这样。
gdoron支持Monica

1
到目前为止,这里是最好的答案。
born_naked

相反,这应该是公认的答案。许多simpeler都不依赖于软件包(当时可能不可用)
匿名

我真的很喜欢这个答案,但是对于spark 3.0.0来说算不上对我有用。我认为是因为count是函数而不是数字。TypeError:无效的参数,而不是字符串或列:类型<class'method'>的<bound方法DataFrame.count of DataFrame [...]>。对于列文字,请使用“ lit”,“ array”,“ struct”或“ create_map”函数。
阿曼多

4

在pyspark 2.4.4中

1) group_by_dataframe.count().filter("`count` >= 10").orderBy('count', ascending=False)

2) from pyspark.sql.functions import desc
   group_by_dataframe.count().filter("`count` >= 10").orderBy('count').sort(desc('count'))

无需在1)和1)中导入,并且简短易读,
所以我更喜欢1)而不是2)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.