如何在Spark DataFrame GroupBy 中保留非聚合列
使用DataFrame 的groupBy 方法聚合資料時,產生的DataFrame 僅包含該組-按鍵和聚合值。但是,在某些情況下,可能還需要在結果中包含原始 DataFrame 中的非聚合資料列。
Spark SQL 的限制
Spark SQL 如下1999 年之前的 SQL 約定,不允許在聚合查詢中新增附加列。像 count 這樣的聚合在應用於多個列時會產生未明確定義的結果,因此處理此類查詢的不同系統會表現出不同的行為。
解決方案:
要保留非- Spark DataFrame groupBy 中的聚合列,有以下幾個選項:
val aggregatedDf = df.groupBy(df("age")).agg(Map("id" -> "count")) val joinedDf = aggregatedDf.join(df, Seq("age"), "left")
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中文網其他相關文章!