У меня есть DataFrame со столбцами "id", "Month", "Day", "Hour" и "value". Я хочу сгруппировать / разделить по id, Month и Hour и выполнить медиану для столбца значения так, чтобыУ меня есть ежедневная медиана в час за каждый месяц. У меня есть UDF, который может рассчитать медиану:
def medianCalculator(seq: Seq[Int]): Int = {
val sortedSeq = seq.sortWith(_ < _)
if (seq.size % 2 == 1) sortedSeq(sortedSeq.size / 2)
else {
val (up, down) = sortedSeq.splitAt(seq.size / 2)
(up.last + down.head) / 2
}
}
Взято из здесь
Я могу применить это ко всему столбцу и получить результат, используя:
val output = df.select("value").collect().flatMap(_.toSeq).toSeq.map(_.toString.toInt)
Однако я не могу определить метод, который разделяет по «id», «Month» и «Hour» и возвращает медиану «value» после группировки / разделения в новом столбце.
РЕДАКТИРОВАТЬ:
Добавлен столбец "День" выше и комментарий о ежедневной медиане в час для каждого месяца.