如何检查数据框中窗口函数中的值?
问题:要在一个时间窗口中查找条件1之后是条件2的数据帧中的行?
数据框架构: --transaction_account:字符串 --transaction_datetime:时间戳 --transaction_amount:Double
预期输出: 从同一transaction_account起10分钟内,transaction_amount <= 100,然后是transaction_amount> = 10000
我尝试过在RelationalGroupedDateset上使用“确保”功能,但如何在窗口上背靠背检查这两个条件 这就是我尝试过的:
val r=df.groupBy(window(col("transaction_datetime"),"10 minutes"),col("transaction_account")).ensuring() //<----How to use ensuring in this case
我什至创建了一个要从“确保”功能调用的UDF:
def check1(dd:RelationalGroupedDataset): Boolean = {
var d=dd.sort("transaction_txndatetime").withColumn("row_no",monotonically_increasing_id())
var d1=d.where(col("transaction_amount")<=100)
var d2=d.where(col("transaction_amount")>=10000)
var m1=d1.select("row_no").agg(min("row_no")).first().getLong(0)
var m2=d2.select("row_no").agg(max("row_no")).first().getLong(0)
if(m1<m2)
return true
else
return false
}
但是后来我才知道RelationalGroupedDataset无法传递给函数
如何完成此任务? 是否有其他方法可以实现这一目标? 另外,通常如何使用Spark检查此类后续条件?
注意:
Python或Scala无关紧要