¿Cómo podría ordenar por sum, dentro de un DataFrame en PySpark?

Análogamente a:

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

Yo he tratado:

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

pero esto da un error:

Py4JJavaError: Se produjo un error al llamar a o501.sort. : org.apache.spark.sql.AnalysisException: no se puede resolver la ‘sum’ dada las columnas de entrada order_item_order_id, SUM (order_item_subtotal # 429);

También he intentado:

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

pero me sale el mismo error:

Py4JJavaError: Se produjo un error al llamar a o512.sort. : org.apache.spark.sql.AnalysisException: no se puede resolver ‘SUM (order_item_subtotal)’ dado las columnas de entrada order_item_order_id, SUM (order_item_subtotal # 429);

Obtengo el resultado correcto al ejecutar:

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

pero esto se hizo a posteriori , después de haber visto el número que Spark agrega al nombre de la columna de la sum, es decir, # 429 .

¿Hay una manera de obtener el mismo resultado pero a priori , sin saber qué número se agregará?

Deberías usar alias para tus columnas:

 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")