ホームページ > データベース > mysql チュートリアル > groupBy を使用して Spark DataFrame でデータを集計するときにすべての列を保持するにはどうすればよいですか?

groupBy を使用して Spark DataFrame でデータを集計するときにすべての列を保持するにはどうすればよいですか?

DDD
リリース: 2024-12-22 16:27:11
オリジナル
414 人が閲覧しました

How can I retain all columns when aggregating data in a Spark DataFrame using groupBy?

複数の列によるデータのグループ化と集計

Spark DataFrame の groupBy メソッドを使用する場合、特定の列に対して集計操作を実行してデータを要約できます。 。ただし、結果の DataFrame には、グループ化された列と集計結果のみが含まれます。

この制限に対処し、集計とともに追加の列を取得するには、次の解決策を検討してください。

使用最初または最後の集計

1 つのアプローチは、first() または last() 集計関数を使用して、グループ化された DataFrame に追加の列を含めます。例:

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

このクエリは、「age」、「name」、「count(id)」の 3 つの列を持つ DataFrame を作成します。 「name」列には各年齢グループの最初の値が含まれ、「count(id)」列には各年齢グループの「id」値の数が含まれます。

集計結果の結合

もう 1 つの解決策は、グループ化された列を結合キーとして使用して、集約された DataFrame を元の DataFrame に結合することです。このアプローチでは、元の DataFrame のすべての列が保持されます。

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

結果の DataFrame "joinedDf" には、元の DataFrame のすべての列と、グループ化された DataFrame の "count(id)" 集計が含まれます。

ウィンドウ関数の使用

最後に、ウィンドウ関数を使用して、列を追加して groupBy の目的の動作をエミュレートすることもできます。以下に例を示します。

df.withColumn("rowNum", row_number().over(Window.partitionBy("age")))
.groupBy("age").agg(first("name"), count("id"))
.select("age", "name", "count(id)")
ログイン後にコピー

このクエリは、各年齢グループ内の各レコードに行番号を割り当てるウィンドウ関数を作成します。次に、この行番号を使用して、「count(id)」集計とともに各年齢グループの最初に出現した「name」を取得します。

アプローチの選択は、特定の要件とパフォーマンスの考慮事項によって異なります。あなたのアプリケーション。

以上がgroupBy を使用して Spark DataFrame でデータを集計するときにすべての列を保持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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