数列のpysparkデータフレームがあります。その列を合計し、結果をpython変数のintとして返す必要があります。
df = spark.createDataFrame([("A", 20), ("B", 30), ("D", 80)],["Letter", "Number"])
列を合計するには、次を実行します。
df.groupBy().sum()
しかし、私はデータフレームを取り戻します。
+-----------+
|sum(Number)|
+-----------+
| 130|
+-----------+
私は、プログラムのどこかで使用される変数に格納されたintとして130を返します。
result = 130
私は最も簡単な方法だと思います:
df.groupBy().sum().collect()
リストを返します。あなたの例では:
In [9]: df.groupBy().sum().collect()[0][0]
Out[9]: 130
本当に簡単な方法:
df.groupBy().sum().collect()
しかし、それは非常に遅い操作です: groupByKeyを避ける 、RDDとreduceByKeyを使用する必要があります:
df.rdd.map(lambda x: (1,x[1])).reduceByKey(lambda x,y: x + y).collect()[0][1]
より大きなデータセットで試して、処理時間を測定しました:
RDDおよびReduceByKey:2.23 s
GroupByKey:30.5秒
これは別の方法です。 agg
およびcollect
を使用:
sum_number = df.agg({"Number":"sum"}).collect()[0]
result = sum_number["sum(Number)"]