Как проверить значения в функциях управления окнами в фреймах данных?
Проблема: Найти строки в фрейме данных, где условие1 следует за условием2 в течение временного окна?
Схема фрейма данных: --transaction_account: String --transaction_datetime: timestamp --transaction_amount: Double
Ожидаемый_процесс: транзакция_amount <= 100, за которой следует транзакция_амонт> = 10000 через 10 минут от той же транзакции_аккаунта
Я пытался использовать функцию «обеспечение» поверхRelationalGroupedDateset, но как мне проверить эти 2 условия вплотную по окну? Это то, что я пытался:
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 не имеют значения, если решение достигнуто