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