Spark DataFrame GroupBy で追加の列を取得する別の方法
Spark DataFrame で groupBy 操作を実行すると、次の問題が発生する可能性があります。グループ化列と集計関数の結果を取得し、元の列から他の列を除外します。 DataFrame.
これに対処するには、次の 2 つの主なアプローチを検討できます:
Spark SQL は SQL:1999 より前の規則に準拠しており、集計に追加の列を含めることを禁止しています。クエリ。したがって、必要なデータを集約して、元の DataFrame に結合し直すことができます。これは、以下に示すように、selectExpr メソッドと join メソッドを使用して実現できます。
// Aggregate the data val aggDF = df.groupBy(df("age")).agg(Map("id" -> "count")) // Rename the aggregate function's result column for clarity val renamedAggDF = aggDF.withColumnRenamed("count(id)", "id_count") // Join the aggregated results with the original DataFrame val joinedDF = df.join(renamedAggDF, df("age") === renamedAggDF("age"))
または、次のこともできます。ウィンドウ関数を利用して追加の列を計算し、それらをグループ化された DataFrame 内に保存します。この方法では主に、グループ化列にウィンドウ フレームを定義し、集計関数を適用して目的のデータを取得します。
// Get the row number within each age group val window = Window.partitionBy(df("age")).orderBy(df("age")) // Use the window function to calculate the cumulative count of ids val dfWithWindow = df.withColumn("id_count", count("id").over(window))
これらの手法を採用すると、必要な追加の列を取得しながら、必要な列を取得できるようになります。 Spark DataFrame で groupBy 操作を実行します。
以上がGroupBy 操作の後に Spark DataFrame に追加の列を含めるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。