ホームページ > データベース > mysql チュートリアル > Spark DataFrame GroupBy オペレーションで追加の列を保持する方法は?

Spark DataFrame GroupBy オペレーションで追加の列を保持する方法は?

Susan Sarandon
リリース: 2024-12-25 02:11:17
オリジナル
547 人が閲覧しました

How to Preserve Additional Columns in Spark DataFrame GroupBy Operations?

Spark DataFrame GroupBy オペレーションでの追加列の保持

Spark DataFrame groupBy クエリでは、グループ関連の列と集計のみを取得するのが一般的です。ただし、グループ キーや集計関数の結果以外にも追加の列を保持するシナリオが考えられます。

次の groupBy 操作を考えてみましょう:

df.groupBy(df("age")).agg(Map("id" -> "count"))
ログイン後にコピー

このクエリは次の DataFrame を返します。列は「age」と「count(id)」の 2 つだけです。 「名前」など、元のデータフレームから追加の列が必要な場合は、いくつかの方法を利用できます。

方法 1: 集計結果を元のテーブルと結合する

1この方法では、DataFrame を集計結果と結合して、欠落している列を取得します。例:

val agg = df.groupBy(df("age")).agg(Map("id" -> "count"))
val result = df.join(agg, df("age") === agg("age"))
ログイン後にコピー

この手法では、元の DataFrame のすべての列が保持されますが、大規模なデータセットの場合は効率が低下する可能性があります。

アプローチ 2: 追加関数による集計 (最初/最後) )

first や last などの追加の集計関数を使用して、グループ以外の列を含めることもできます。集計結果。例:

df.groupBy(df("age")).agg(Map("id" -> "count", "name" -> "first"))
ログイン後にコピー

これは、「age」、「count(id)」、および「first(name)」の 3 つの列を含む DataFrame を返します。

アプローチ3: ウィンドウ関数 Where Filter

場合によっては、ウィンドウ関数と where フィルターを組み合わせて利用して、目的の結果を達成できます。 結果。ただし、このアプローチはパフォーマンスに影響を与える可能性があります。

df.select(
  col("name"),
  col("age"),
  count("id").over(Window.partitionBy("age").rowsBetween(Window.unboundedPreceding, Window.currentRow))
).where(col("name").isNotNull)
ログイン後にコピー

これらの手法を採用すると、Spark DataFrame で groupBy 操作を実行するときに追加の列を効果的に保持し、さまざまな分析要件に対応できます。

以上がSpark DataFrame GroupBy オペレーションで追加の列を保持する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート