В моем приложении Spark Scala у меня есть СДР в следующем формате:
(05/05/2020, (name, 1))
(05/05/2020, (name, 1))
(05/05/2020, (name2, 1))
...
(06/05/2020, (name, 1))
Я хочу сгруппировать эти элементы по дате и суммировать кортежи с тем же «именем», что и ключ..
Ожидаемый результат:
(05/05/2020, List[(name, 2), (name2, 1)]),
(06/05/2020, List[(name, 1)])
...
Для этого в настоящее время я использую операцию groupByKey
и некоторые дополнительные преобразования для группировки кортежейпо ключу и вычислите сумму для тех, у кого один и тот же.
По соображениям производительности я хотел бы заменить эту операцию groupByKey
на reduceByKey
или aggregateByKey
, чтобы уменьшить суммуданных, передаваемых по сети.
Однако я не могу понять, как это сделать.Оба эти преобразования принимают в качестве параметра функцию между значениями (кортежи в моем случае), поэтому я не вижу, как я могу сгруппировать кортежи по ключу, чтобы вычислить их сумму.
Это выполнимо?