首頁 > 資料庫 > mysql教程 > 在 Spark DataFrame 中分組時如何保留其他欄位?

在 Spark DataFrame 中分組時如何保留其他欄位?

Barbara Streisand
發布: 2024-12-21 01:01:09
原創
532 人瀏覽過

How Can I Keep Other Columns When Grouping in a Spark DataFrame?

在Spark DataFrame 中分組時保留其他欄位

在執行DataFrame groupby 運算時,常常會遇到只接收分組的問題欄和聚合值。如果您需要保留原始 DataFrame 中的其他列,這可能會很不方便。

例如,考慮以下分組:

df.groupBy(df("age")).agg(Map("id" -> "count"))
登入後複製

這將傳回一個僅包含「age」的 DataFrame和「計數(id)」欄位。但是,如果原始 DataFrame 中存在「name」和其他資料列,您可能會想要將它們包含在結果中。

在標準 SQL 中,可以使用以下查詢來實現:

select name, age, count(id) from df group by age
登入後複製

要在 Spark 中複製此行為,您可以將聚合結果與原始表連接。連線的關鍵列應與 groupby 欄位相同。

這是使用 Spark SQL 的範例:

val groupedDf = df.groupBy($"age").agg(count($"id").as("count"))
val joinedDf = df.join(groupedDf, Seq("age"), "left")
登入後複製

joinedDf 現在將包含所有原始列以及聚合的「計數」列。

另一種方法是使用任意聚合(例如第一個或最後一個)來包含其他欄位。例如:

val groupedDf = df.groupBy($"age").agg(first($"name").as("name"), count($"id").as("count"))
登入後複製

這將確保「name」列保留在聚合的 DataFrame 中。

雖然這些方法允許您在分組期間檢索其他列,但請務必注意此類查詢通常沒有明確定義,並且可能在不同系統中表現出不同的行為。

以上是在 Spark DataFrame 中分組時如何保留其他欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板