如何将 avg 降序排列?

How to put avg in descending order?

我想使用 spark 从 csv 文件中获取 zhvi 数字的降序并四舍五入为整数。

但是,当我在代码末尾尝试 sort(desc("Zhvi")) 时。它总是给我错误。

from pyspark.sql.functions import col, desc
stateByZhvi = home.select('State','Zhvi').groupBy((col("State"))).avg("Zhvi").show()

我的部分结果:

+-----+------------------+
|State|         avg(Zhvi)|
+-----+------------------+
|   AZ|246687.01298701297|
|   SC|143188.94736842104|
|   LA|159991.74311926606|
|   MN|236449.40239043825|
|   NJ| 367156.5637065637|
|   DC| 586109.5238095238|
|   OR| 306646.3768115942|
|   VA| 282764.4986449864|

有人可以帮忙吗?

使用SQL怎么样:

home.createOrReplaceTempView("home")

spark.sql("select State, round(avg(Zhvi)) as avg_Zhvi from home group by State order by 2 desc").show()
// input dataframe
+-----+------------------+
|State|               avg|
+-----+------------------+
|   AZ|246687.01298701297|
|   SC|143188.94736842104|
|   LA|159991.74311926606|
+-----+------------------+

df.orderBy(desc("avg")).show()

//
+-----+------------------+
|State|               avg|
+-----+------------------+
|   AZ|246687.01298701297|
|   LA|159991.74311926606|
|   SC|143188.94736842104|
+-----+------------------+

可能还有其他问题,你好像用的是"sort(desc("Zhvi"))",

然而,在 avg 函数之后,列名发生了变化,"|State| avg(Zhvi)|"

谢谢

我解决了你遇到的同样问题,这是我的解决方案。使用 agg、avg、alias 和 order by(升序参数为 false):

from pyspark.sql.functions import *
stateByZhvi = home.groupBy((col("State"))).agg.avg(col("Zhvi")).alias("avg_Zhvi").orderBy("avg_Zhvi", ascending=False).select('State','avg_Zhvi')show()