4

同様に:

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: 指定された入力列 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を見た後、事後的に行われました。

どの番号が追加されるかを知らずに、アプリオリに同じ結果を得る方法はありますか?

4

1 に答える 1

8

列にはエイリアスを使用する必要があります。

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")
于 2015-12-21T12:07:42.267 に答える