次のようなデータフレームがあります
In [94]: prova_df.show()
order_item_order_id order_item_subtotal
1 299.98
2 199.99
2 250.0
2 129.99
4 49.98
4 299.95
4 150.0
4 199.92
5 299.98
5 299.95
5 99.96
5 299.98
私がやりたいのは、最初の列の異なる値ごとに、2番目の列の対応する値の合計を計算することです。私は次のコードでこれをやってみました:
from pyspark.sql import functions as func
prova_df.groupBy("order_item_order_id").agg(func.sum("order_item_subtotal")).show()
これは出力を与えます
SUM('order_item_subtotal)
129.99000549316406
579.9500122070312
199.9499969482422
634.819995880127
434.91000747680664
それが正しいことをしているのかどうかはよくわかりません。最初の列の情報も表示されないのはなぜですか?よろしくお願いします
最初の列の情報も表示されないのはなぜですか?
おそらく、古いSpark 1.3.xを使用しているためです。その場合は、次のようにagg
内の列のグループ化を繰り返す必要があります。
(df
.groupBy("order_item_order_id")
.agg(func.col("order_item_order_id"), func.sum("order_item_subtotal"))
.show())
PySpark 2.7.xを使用した問題の同様の解決策は、次のようになります。
df = spark.createDataFrame(
[(1, 299.98),
(2, 199.99),
(2, 250.0),
(2, 129.99),
(4, 49.98),
(4, 299.95),
(4, 150.0),
(4, 199.92),
(5, 299.98),
(5, 299.95),
(5, 99.96),
(5, 299.98)],
['order_item_order_id', 'order_item_subtotal'])
df.groupBy('order_item_order_id').sum('order_item_subtotal').show()
その結果、次の出力が得られます。
+-------------------+------------------------+
|order_item_order_id|sum(order_item_subtotal)|
+-------------------+------------------------+
| 5| 999.8700000000001|
| 1| 299.98|
| 2| 579.98|
| 4| 699.85|
+-------------------+------------------------+