我正在使用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:
在PySpark 1.3中,sort
方法不采用升序参数。您可以改用desc
method:
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
到目前为止,最方便的方法是使用此方法:
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)
您还可以如下使用groupBy和orderBy
dataFrameWay = df.groupBy("firstName").count().withColumnRenamed("count","distinct_name").sort(desc("count"))