注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
PySpark で集計を行う方法はいくつかあります。最も信頼性の高い方法として、この構文を推奨します。
Copied!1 2 3aggregated_df = df.groupBy('state').agg( F.max('city_population').alias('largest_city_in_state') )
| state | city | city_population |
|---|---|---|
| WA | Bellevue | 100000 |
| WA | Seattle | 700000 |
| PA | Philadelphia | 1500000 |
| PA | Pittsburgh | 300000 |
| state | largest_city_in_state |
|---|---|
| PA | 1500000 |
| WA | 700000 |
DataFrame の行をまとめずに、平均値や最大値などの集計値を各行に追加するには、ウィンドウ関数を使用します。ウィンドウ関数は元の列と行を保持します。
DataFrame の .groupBy() メソッドは、集計対象となる列を任意の数だけ受け取ります。また、DataFrame 全体を集計するには、列を指定しません。
Copied!1 2 3 4 5 6 7aggregated_df = df.groupBy('state', 'county').agg( F.max('city_population').alias('largest_city_in_state_county') ) aggregated_df = df.groupBy().agg( F.max('city_population').alias('largest_city_overall') )
グループ化された DataFrame の .agg() メソッドは、集計関数を任意の数だけ受け取ります。
Copied!1 2 3 4aggregated_df = df.groupBy('state').agg( F.max('city_population').alias('largest_city_in_state'), F.avg('city_population').alias('average_population_in_state') )
デフォルトでは、集計によって
aggregation_name(target_column)という形式の列が生成されます。ただし、Foundry の列名には、丸括弧やその他の英数字以外の文字を含めることはできません。代わりに、各集計に特定の名前をエイリアスとして設定します。
PySpark のピボットテーブルは、通常のグループ化された集計とほぼ同じように動作します。
Copied!1pivoted_df = df.groupBy('equipment').pivot('sensor').mean('value')
| equipment | sensor | value |
|---|---|---|
| A | temperature | 60 |
| A | temperature | 40 |
| B | speed | 6 |
| A | speed | 3 |
| equipment | temperature | speed |
|---|---|---|
| A | 50 | 3 |
| B | null | 7 |
avg(column) / mean(column)collect_list(column)collect_set(column)count(column)corr(x, y)x と y のピアソンの相関係数です。covar_pop(col1, col2)covar_samp(col1, col2)countDistinct(column, *cols)first(column, ignorenulls=False)grouping(column)grouping_id(*cols)kurtosis(column)last(column, ignorenulls=False)max(column)min(column)skewness(column)stddev(column)stddev_pop(column)stddev_samp(column)sum(column)sumDistinct(column)var_pop(column)var_samp(column)variance(column)