在 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中文网其他相关文章!