首頁 >資料庫 >mysql教程 >如何在 Spark DataFrame GroupBy 操作中保留附加列?

如何在 Spark DataFrame GroupBy 操作中保留附加列?

Susan Sarandon
Susan Sarandon原創
2024-12-25 02:11:17559瀏覽

How to Preserve Additional Columns in Spark DataFrame GroupBy Operations?

在Spark DataFrame GroupBy 操作中保留附加列

在Spark DataFrame groupBy 查詢中,通常只檢索與群組相關的欄位和聚合。但是,在某些情況下,您可能打算保留群組鍵和聚合函數結果以外的其他欄位。

考慮以下 groupBy 操作:

df.groupBy(df("age")).agg(Map("id" -> "count"))

此查詢將傳回一個 DataFrame只有兩列:「age」和「count(id)」。如果您需要原始 DataFrame 中的其他欄位(例如「名稱」),您可以使用多種方法。

方法 1:將聚合結果與原始資料表連接

一種方法是將 DataFrame 與聚合結果連接起來以擷取遺失的資料列。例如:

val agg = df.groupBy(df("age")).agg(Map("id" -> "count"))
val result = df.join(agg, df("age") === agg("age"))

此技術保留了原始 DataFrame 中的所有列,但對於大型資料集效率可能較低。

方法2:使用附加函數進行聚合(第一個/最後一個) )

您也可以使用其他聚合函數(例如第一個或最後一個)在聚合中包含非群組列結果。例如:

df.groupBy(df("age")).agg(Map("id" -> "count", "name" -> "first"))

這將傳回一個包含三列的 DataFrame:「age」、「count(id)」和「first(name)」。

方法3:視窗函數Where過濾器

在某些情況下,您可以利用視窗函數與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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn