在 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'
376209 次浏览

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

不需要特殊进口。

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

排序(keyfunc,升序 = 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))