注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

集約とピボットテーブル

集約の構文

PySpark で集約を生成する方法はいくつかありますが、最も信頼性の高い構文をお勧めします。

Copied!
1 2 3 4 # コードに日本語でコメントを追加します aggregated_df = df.groupBy('state').agg( F.max('city_population').alias('largest_city_in_state') # 各州の最大都市人口を求め、エイリアスとして'largest_city_in_state'を設定 )
statecitycity_population
WABellevue100000
WASeattle700000
PAPhiladelphia1500000
PAPittsburgh300000
statelargest_city_in_state
PA1500000
WA700000

DataFrame.groupBy() メソッドは、集約を実行する任意の数の列を受け取ります。代わりに、DataFrame全体で集約するには、列を含めません。

Copied!
1 2 3 4 5 6 7 8 9 10 # 'state' と 'county' でグループ化し、各 'state' と 'county' の最大 'city_population' を取得します。 # これは、各 'state' と 'county' の最大都市の人口を表します。 aggregated_df = df.groupBy('state', 'county').agg( F.max('city_population').alias('largest_city_in_state_county') ) # 全体の 'city_population' の最大値を取得します。これは全体の最大都市の人口を表します。 aggregated_df = df.groupBy().agg( F.max('city_population').alias('largest_city_overall') )

グループ化された DataFrame 上の .agg() メソッドは、任意の数の集約関数を取ります。

Copied!
1 2 3 4 5 6 7 # DataFrame 'df' を 'state' 列でグループ化し、各州に対して以下の処理を行います。 aggregated_df = df.groupBy('state').agg( # 各州内の最大の 'city_population' 値を取得し、新たな列 'largest_city_in_state' として保存します。 F.max('city_population').alias('largest_city_in_state'), # 各州内の 'city_population' 値の平均を計算し、新たな列 'average_population_in_state' として保存します。 F.avg('city_population').alias('average_population_in_state') )

デフォルトでは、集約は aggregation_name(target_column) の形式の列を生成します。しかし、Foundryでは、カラム名には括弧や他の非英数字の文字を含めることはできません。その代わりに、各集約に特定の名前をエイリアスとして指定します。

ピボットテーブル

PySparkのピボットテーブルは、通常のグループ化された集約と非常に似ています。

Copied!
1 2 # equipmentでグループ化し、sensorでピボットし、valueの平均値を算出します。 pivoted_df = df.groupBy('equipment').pivot('sensor').mean('value')
装置センサー
A温度60
A温度40
B速度6
A速度3
装置温度速度
A503
Bnull7

集約関数

PySpark の集約関数についてもっと学ぶ。

avg(行) / mean(行)

collect_list(行)

  • 全ての値を配列に結合します

collect_set(行)

  • 全ての値を配列に重複を除いて結合します

count(行)

corr(x, y)

  • xy のピアソンの相関係数。

covar_pop(col1, col2)

covar_samp(col1, col2)

countDistinct(行, *cols)

first(行, ignorenulls=False)

  • グループ内の行の最初の値。ピボットテーブルなど、一つの値しか存在しないことを期待しているが、何らかの集約を選択しなければならない場合に有用です。

grouping(行)

grouping_id(*cols)

kurtosis(行)

last(行, ignorenulls=False)

max(行)

min(行)

skewness(行)

stddev(行)

stddev_pop(行)

  • 母集団標準偏差

stddev_samp(行)

  • 不偏標本標準偏差

sum(行)

sumDistinct(行)

var_pop(行)

  • 母集団分散

var_samp(行)

  • 不偏標本分散

variance(行)