[解決済み] Spark SQL: カラムのリストに集約関数を適用する
2023-03-19 23:36:29
質問
データフレームのすべての列(またはリスト)に対して、集約関数を適用する方法はありますか?
groupBy
? 言い換えれば、すべての列に対してこれを行うことを回避する方法はありますか。
df.groupBy("col1")
.agg(sum("col2").alias("col2"), sum("col3").alias("col3"), ...)
どのように解決するのですか?
複数の列に対して集計関数を適用する方法は複数あります。
GroupedData
クラスは、最も一般的な関数のために、以下のような多くのメソッドを提供します。
count
,
max
,
min
,
mean
と
sum
であり,以下のように直接利用することができる.
-
Pythonです。
df = sqlContext.createDataFrame( [(1.0, 0.3, 1.0), (1.0, 0.5, 0.0), (-1.0, 0.6, 0.5), (-1.0, 5.6, 0.2)], ("col1", "col2", "col3")) df.groupBy("col1").sum() ## +----+---------+-----------------+---------+ ## |col1|sum(col1)| sum(col2)|sum(col3)| ## +----+---------+-----------------+---------+ ## | 1.0| 2.0| 0.8| 1.0| ## |-1.0| -2.0|6.199999999999999| 0.7| ## +----+---------+-----------------+---------+
-
Scala
val df = sc.parallelize(Seq( (1.0, 0.3, 1.0), (1.0, 0.5, 0.0), (-1.0, 0.6, 0.5), (-1.0, 5.6, 0.2)) ).toDF("col1", "col2", "col3") df.groupBy($"col1").min().show // +----+---------+---------+---------+ // |col1|min(col1)|min(col2)|min(col3)| // +----+---------+---------+---------+ // | 1.0| 1.0| 0.3| 0.0| // |-1.0| -1.0| 0.6| 0.2| // +----+---------+---------+---------+
オプションで、集約する列のリストを渡すことができます。
df.groupBy("col1").sum("col2", "col3")
カラムをキー、関数を値とする辞書/マップを渡すことも可能です。
-
Python
exprs = {x: "sum" for x in df.columns} df.groupBy("col1").agg(exprs).show() ## +----+---------+ ## |col1|avg(col3)| ## +----+---------+ ## | 1.0| 0.5| ## |-1.0| 0.35| ## +----+---------+
-
Scala
val exprs = df.columns.map((_ -> "mean")).toMap df.groupBy($"col1").agg(exprs).show() // +----+---------+------------------+---------+ // |col1|avg(col1)| avg(col2)|avg(col3)| // +----+---------+------------------+---------+ // | 1.0| 1.0| 0.4| 0.5| // |-1.0| -1.0|3.0999999999999996| 0.35| // +----+---------+------------------+---------+
最後にvarargsを使用することができます。
-
Python
from pyspark.sql.functions import min exprs = [min(x) for x in df.columns] df.groupBy("col1").agg(*exprs).show()
-
Scala
import org.apache.spark.sql.functions.sum val exprs = df.columns.map(sum(_)) df.groupBy($"col1").agg(exprs.head, exprs.tail: _*)
同様の効果を得るための他の方法もありますが、ほとんどの場合、これで十分すぎるほどの効果が得られるはずです。
こちらもご覧ください。
関連
-
[解決済み] Spark コンテキスト 'sc' が定義されていない
-
[解決済み] Spark が "java.net.URISyntaxException" を報告するのはなぜですか?DataFrameを使用する際に「java.net.URIStyntaxException: Relative path in absolute URI」と表示されるのはなぜですか?
-
[解決済み] データフレームを複数回グループ化する
-
[解決済み] spark checkpointとpersist to a diskの違いは何ですか?
-
[解決済み] プロパティspark.yarn.jars - どのようにそれに対処するのですか?
-
[解決済み] pandas GroupByを使ってグループごとの統計情報(カウント、平均値など)を取得する?
-
[解決済み] 非常に大きなテーブルをデータフレームとして高速に読み込む
-
[解決済み】pandasでカラムの種類を変更する
-
[解決済み】複数のgroupbyカラムに複数の関数を適用する
-
[解決済み】Pandas DataframeのカラムでNaN値をゼロに置き換えるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】spark.driver.maxResultSizeとは何ですか?
-
[解決済み] PySparkのデータフレームで、各キーのパーセンタイルはどのように計算されますか?
-
[解決済み] Apache SparkとAkkaの比較【終了しました
-
[解決済み] Spark: 2つのDataFrameを減算する
-
[解決済み] Sparkのバージョンを確認する方法【終了しました
-
[解決済み] spark.yarn.executor.memoryOverhead "の設定値?
-
[解決済み] プロパティspark.yarn.jars - どのようにそれに対処するのですか?
-
[解決済み】Spark Dataframeで列の内容をすべて表示するにはどうすればよいですか?
-
[解決済み] Apache SparkのWeb UIにおける「Stage Skipped」の意味とは?
-
[解決済み] sparkのexecutor数、cores、executor memoryのチューニング方法は?