类似于:
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附加到总和列名称的数字,即#429之后,这是后验的.
有没有办法获得相同的结果,但先验,不知道将附加哪个数字?
您应该为列使用别名:
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")