Я хотел бы использовать оператор GroupBy в DataFrame с моими собственными компараторами равенства.
Давайте предположим, что я хочу выполнить что-то вроде:
df.groupBy("Year","Month").sum("Counter")
В этом фрейме данных:
Year | Month | Counter
---------------------------
2012 | Jan | 100
12 | January | 200
12 | Janu | 300
2012 | Feb | 400
13 | Febr | 500
Я должен реализовать два компаратора:
1) Для колонки Year: p.e. "2012" == "12"
2) Для столбца Месяц: п.е. "Ян" == "Январь" == "Яну"
Давайте предположим, что я уже реализовал эти два компаратора. Как я могу их вызвать? Как и в этом примере, я уже знаю, что мне нужно преобразовать мой DataFrame в RDD, чтобы можно было использовать мои компараторы.
Я думал об использовании RDD GroupBy .
Обратите внимание, что Мне действительно нужно сделать это с помощью компараторов . Я не могу использовать пользовательские функции, изменять данные или создавать новые столбцы. Будущая идея состоит в том, чтобы иметь столбцы зашифрованного текста, в которых у меня есть функции, которые позволяют мне сравнивать, совпадают ли два зашифрованных текста. Я хочу использовать их в моих компараторах.
Edit:
В данный момент я пытаюсь сделать это только с одним столбцом, например:
df.groupBy("Year").sum("Counter")
У меня есть класс Wrapper:
class ExampleWrapperYear (val year: Any) extends Serializable {
// override hashCode and Equals methods
}
Затем я делаю это:
val rdd = df.rdd.keyBy(a => new ExampleWrapperYear(a(0))).groupByKey()
Мой вопрос здесь состоит в том, как сделать «сумму» и как использовать keyBy с несколькими столбцами, чтобы использовать ExampleWrapperYear и ExampleWrapperMonth.