ホームページ >データベース >mysql チュートリアル >Spark DataFrame GroupBy オペレーションで追加の列を保持する方法は?
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 サイトの他の関連記事を参照してください。