类比于:
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:无法解析“给定输入列 order_item_order_id, SUM(order_item_subtotal#429)的 SUM(order_item_subtotal)。”
当执行以下操作时,我可以得到正确的结果:
order_items.groupBy("order_item_order_id").sum("order_item_subtotal").orderBy(desc("SUM(order_item_subtotal#429)")).show()
但是这是在看到Spark附加到总列名称的数字,即#429之后才完成的。
是否有一种方法可以在事先不知道将添加哪个数字的情况下获得相同的结果?
order_items.groupBy("order_item_order_id")\ .agg(order_items["order_item_order_id"],\ func.sum("order_item_subtotal")\ .alias("sum_column_name"))\ .orderBy("sum_column_name")
不过,我想知道是否有更简单的方法来获得与计数示例相同的结果。 - Albert Villanova del Moralorder_items.groupBy("order_item_order_id").agg(func.sum("order_item_subtotal").alias("sum_column_name")).orderBy("sum_column_name")
我已经测试过了,它可以正常工作。 - architectonicorder_items.groupBy("order_item_order_id").agg(order_items["order_item_order_id"], func.sum("order_item_subtotal").alias("sum_column_name")).orderBy("sum_column_name")
。 - Albert Villanova del Moralcube
。例如,您可以编写:order_items.cube('order_item_order_id', 'some_other_column').agg({'order_item_subtotal': 'sum', '*': 'count'})
- architectonic