无法使用窗口功能星火

无法使用窗口功能星火

问题描述:

数据帧过滤我尝试使用基于窗口功能的逻辑表达式来检测重复记录:在星火2.1.1无法使用窗口功能星火

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

这给:

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)) 
.show 

我想知道如何在不使用临时列的情况下编写此代码?

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

你可以做的是将窗口函数绘制到select中。

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

然后你在一个声明中有它。