lit(1)) .sh-6ren">
gpt4 book ai didi

scala - 无法在 Spark 中使用窗口函数过滤数据帧

转载 作者:行者123 更新时间:2023-12-04 19:30:01 25 4
gpt4 key购买 nike

我尝试使用基于窗口函数的逻辑表达式来检测重复记录:

df
.where(count("*").over(Window.partitionBy($"col1",$"col2"))>lit(1))
.show

这在 Spark 2.1.1 中给出:
java.lang.ClassCastException: org.apache.spark.sql.catalyst.plans.logical.Project cannot be cast to org.apache.spark.sql.catalyst.plans.logical.Aggregate

另一方面,如果我将窗口函数的结果分配给一个新列然后过滤该列,它会起作用:
df
.withColumn("count", count("*").over(Window.partitionBy($"col1",$"col2"))
.where($"count">lit(1)).drop($"count")
.show

我想知道如何在不使用临时专栏的情况下编写此内容?

最佳答案

我猜窗口函数不能在过滤器中使用。您必须创建一个额外的列并过滤这一列。

您可以做的是将窗口函数绘制到选择中。

df.select(col("1"), col("2"), lag(col("2"), 1).over(window).alias("2_lag"))).filter(col("2_lag")==col("2"))

然后你在一个语句中得到它。

关于scala - 无法在 Spark 中使用窗口函数过滤数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44560166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com