2017-10-20 76 views
2

我想要得到一个降序,并使用spark从一个csv文件中取整数为zhvi如何把avg降序?

但是,当我在代码的末尾尝试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| 

任何一个可以帮助?

+0

你做排序(递减( “Zhvi”))在分组平均数据。 ? – Suresh

回答

0

有关使用SQL什么:

home.createOrReplaceTempView("home") 

spark.sql("select State, round(avg(Zhvi)) as avg_Zhvi from home group by State order by 2 desc").show() 
+0

如果OP使用DataFrame API并且存在解决方案,那么为什么还会有人回到SQL呢? –

+0

@JacekLaskowski,主要是因为它对于我来说比前DBA更方便。有缺点吗?与SQL相比,DataFrame API更受欢迎吗? – MaxU

+0

唯一的缺点是OP询问了基于非SQL/DataFrame的解决方案。 –

2
// 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| 
+-----+------------------+ 

有可能是另外一个问题,看来你是使用 “排序(递减(” Zhvi “))”,

但是,列名称在平均函数后发生变化,“| State | avg(Zhvi) |”

感谢