在 PySpark 中按降序排序

Sort in descending order in PySpark

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

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

使用orderBy:

df.orderBy('column_name', ascending=False)

完整答案:

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

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

您也可以使用 groupBy 和 orderBy,如下所示

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

到目前为止最方便的方法是使用这个:

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

不需要特殊进口。

在 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)

RDD.sortBy(keyfunc, ascending=True, numPartitions=None)

一个例子:

words =  rdd2.flatMap(lambda line: line.split(" "))
counter = words.map(lambda word: (word,1)).reduceByKey(lambda a,b: a+b)

print(counter.sortBy(lambda a: a[1],ascending=False).take(10))