在Spark DataFrame GroupBy 中獲取附加列的其他方法
在Spark DataFrame 上執行groupBy 操作時,您可能會遇到僅檢索分組列和聚合函數的結果,忽略原始列中的其他列DataFrame。
要解決這個問題,您可以考慮兩種主要方法:
Spark SQL 遵守pre-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中文網其他相關文章!