如何使用withColumn计算列中的最大值?

2024-01-10

我正在尝试计算 Spark 中以下 DataFrame 的最大值1.6.1:

val df = sc.parallelize(Seq(1,2,3)).toDF("id")

第一种方法是选择最大值,它按预期工作:

df.select(max($"id")).show

第二种方法可以是使用withColumn如下:

df.withColumn("max", max($"id")).show

但不幸的是它失败并出现以下错误消息:

org.apache.spark.sql.AnalysisException:表达式“id”既不是 存在于 group by 中,也不是聚合函数。添加到群组 如果您不关心哪个值,则可以通过或包装在first()(或first_value)中 你得到。;

如何计算a中的最大值withColumn功能没有任何Window or groupBy?如果不可能,在这种特定情况下我该如何使用Window?


正确的方法是将聚合作为单独的查询进行计算,并与实际结果相结合。与此处许多答案中建议的窗口函数不同,它不需要洗牌到单个分区,并且适用于大型数据集。

可以做到withColumn使用单独的操作:

import org.apache.spark.sql.functions.{lit, max}

df.withColumn("max", lit(df.agg(max($"id")).as[Int].first))

但使用显式的方式要干净得多:

import org.apache.spark.sql.functions.broadcast

df.crossJoin(broadcast(df.agg(max($"id") as "max")))

或隐式交叉连接:

spark.conf.set("spark.sql.crossJoin.enabled", true)

df.join(broadcast(df.agg(max($"id") as "max")))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用withColumn计算列中的最大值? 的相关文章

随机推荐