Spark中的“后续”条件

时间:2018-10-11 10:40:21

标签: scala apache-spark pyspark apache-spark-sql pyspark-sql

如何检查数据框中窗口函数中的值?

问题:要在一个时间窗口中查找条件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无关紧要

0 个答案:

没有答案