«Вслед за» условия в Spark - PullRequest
0 голосов
/ 11 октября 2018

Как проверить значения в функциях управления окнами в фреймах данных?

Проблема: Найти строки в фрейме данных, где условие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 не имеют значения, если решение достигнуто

...