Spark DataFrame groupBy并按降序排序(pyspark)

时间:2015-12-29 15:57:38

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

我正在使用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'

5 个答案:

答案 0 :(得分:90)

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

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)一起使用。

答案 1 :(得分:43)

使用 orderBy

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

http://spark.apache.org/docs/2.0.0/api/python/pyspark.sql.html

答案 2 :(得分: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)

答案 3 :(得分:0)

您还可以按以下方式使用groupBy和orderBy

dataFrameWay = df.groupBy("firstName").count().withColumnRenamed("count","distinct_name").sort(desc("count"))

答案 4 :(得分:0)

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

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

不需要特殊输入,也不需要记住如何拼写ascending?