Я знаю, как писать UDF в Spark SQL:
def belowThreshold(power: Int): Boolean = {
return power < -40
}
sqlContext.udf.register("belowThreshold", belowThreshold _)
Могу ли я сделать что-то подобное, чтобы определить агрегированную функцию? Как это делается?
В контексте я хочу запустить следующий SQL-запрос:
val aggDF = sqlContext.sql("""SELECT span, belowThreshold(opticalReceivePower), timestamp
FROM ifDF
WHERE opticalReceivePower IS NOT null
GROUP BY span, timestamp
ORDER BY span""")
Он должен вернуть что-то вроде
Row(span1, false, T0)
Я хочу, чтобы агрегированная функция сообщила мне, есть ли значения для opticalReceivePower
в группах, определенных span
и timestamp
, которые ниже порогового значения. Должен ли я писать свой UDAF по-разному в UDF I, вставленном выше?