我如何在PySpark的DataFrame中按顺序排序?

时间:2015-12-21 11:35:33

标签: python pyspark spark-dataframe

类似于:

order_items.groupBy("order_item_order_id").count().orderBy(desc("count")).show()

我试过了:

order_items.groupBy("order_item_order_id").sum("order_item_subtotal").orderBy(desc("sum")).show()

但这会出错:

  

Py4JJavaError:调用o501.sort时发生错误。   :org.apache.spark.sql.AnalysisException:无法解决' sum'给定输入列order_item_order_id,SUM(order_item_subtotal#429);

我也尝试过:

order_items.groupBy("order_item_order_id").sum("order_item_subtotal").orderBy(desc("SUM(order_item_subtotal)")).show()

但是我得到了同样的错误:

  

Py4JJavaError:调用o512.sort时发生错误。   :org.apache.spark.sql.AnalysisException:无法解析' SUM(order_item_subtotal)'给定输入列order_item_order_id,SUM(order_item_subtotal#429);

执行时我得到了正确的结果:

order_items.groupBy("order_item_order_id").sum("order_item_subtotal").orderBy(desc("SUM(order_item_subtotal#429)")).show()

但是在看到Spark附加到总和列名称的数字后, a posteriori 已完成,即#429

有没有办法获得相同的结果,但先验,却不知道会追加哪个数字?

1 个答案:

答案 0 :(得分:6)

您应该为列使用别名:

import pyspark.sql.functions as func

order_items.groupBy("order_item_order_id")\
           .agg(func.sum("order_item_subtotal")\
                .alias("sum_column_name"))\
           .orderBy("sum_column_name")