ホームページ >データベース >mysql チュートリアル >Spark DataFrame GroupBy の後に非集計列を保持するにはどうすればよいですか?

Spark DataFrame GroupBy の後に非集計列を保持するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-31 14:33:11361ブラウズ

How to Keep Non-Aggregated Columns After a Spark DataFrame GroupBy?

Spark DataFrame GroupBy で非集計列を保持する方法

DataFrame の groupBy メソッドを使用してデータを集計すると、結果の DataFrame にはグループのみが含まれます-キーと集計値ごと。ただし、場合によっては、元の DataFrame の非集計列も結果に含めることが望ましい場合があります。

Spark SQL の制限

Spark SQL は次のとおりです。 1999 年より前の SQL の規則では、集計クエリに列を追加することはできません。 count のような集計は、複数の列に適用すると明確に定義されていない結果を生成するため、このようなクエリを処理するシステムによって動作が異なります。

解決策:

非を保持するには-Spark DataFrame groupBy 内の集計列。いくつかあります。オプション:

  1. 元のデータフレームに結合: 集約されたデータフレームを元のデータフレームに結合して、欠落している列を追加します。
val aggregatedDf = df.groupBy(df("age")).agg(Map("id" -> "count"))
val joinedDf = aggregatedDf.join(df, Seq("age"), "left")
  1. ウィンドウ関数を使用する: first や last などのウィンドウ関数を使用して、集計クエリ。ただし、このアプローチは特定のシナリオでは計算コストが高くなる可能性があります。
import org.apache.spark.sql.expressions.Window
val windowSpec = Window.partitionBy(df("age"))
val aggregatedDf = df.withColumn("name", first(df("name")).over(windowSpec))
  .groupBy(df("age")).agg(Map("id" -> "count"))

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。