在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

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

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

不需要特殊进口。

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

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

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

RDDsortBy(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))
PySpark在1.4.0版本中添加了带有ascending关键字参数的Pandas样式的排序运算符。您现在可以使用
df.sort('<col_name>', ascending = False)

或者您可以使用orderBy功能:

df.orderBy('<col_name>').desc()

您可以使用pyspark.sql.functions.desc。

from pyspark.sql.functions import desc
g.groupBy('dst').count().sort(desc('count')).show()

相关内容

  • 没有找到相关文章

最新更新