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