Spark reducebykey - минимум списка поэлементно

У меня проблемы с использованием функций Spark reduceByKey / groupByKey.

У меня есть пара RDD формы (datetime, [a1, b1, c1, d1]), (datetime, [a2, b2, c2, d2]) ...

Я хотел бы сгруппировать эти элементы по ключу (здесь та же дата и время) и получить выходное значение, соответствующее списку элементарного минимума.

В моем примере результат будет:

(datetime, [min(a1,a2), min(b1,b2), min(c1,c2), min(d1,d2)])

Я пробовал:

reduceByKey(lambda (a, b): [min(x) for x in zip(a, b)])

но пока безуспешно.

заранее спасибо


person PMarshall    schedule 23.08.2016    source источник
comment
На первый взгляд ваша попытка выглядит нормально. Что именно вы имеете в виду под неудачно?   -  person zero323    schedule 23.08.2016
comment
Я получил сообщение об ошибке TypeError: <lambda>() takes exactly 1 argument (2 given) при попытке выполнить вышеуказанное. Просто удалили круглые скобки лямбда-объекта (a, b) и похоже, что он работает ... но я не понимаю, почему ... Все равно спасибо!   -  person PMarshall    schedule 23.08.2016
comment
О, я пропустил скобки. Используйте 1_   -  person zero323    schedule 23.08.2016


Ответы (1)


Что ж, для этой проблемы у нас есть простое решение.

В вашей функции карты перед уменьшением. Вы должны установить свои данные следующим образом:

(datetime, ([a1, b1, c1, d1],))

Обратите внимание, что я вставляю список в кортеж через запятую. Это я делаю «открытый» кортеж. И при этом вы можете сделать свой reduceByKey по умолчанию:

reduceByKey(lambda a, b: a + b)

и вы получите такое rdd:

(datetime, ([a1, b1, c1, d1], [a2, b2, c2, d2]))
person Thiago Baldim    schedule 23.08.2016
comment
Это действительно не решает проблему. OP хочет элементарный минимум, а не группировку. И вся проблема, похоже, заключается в определении параметров. - person zero323; 23.08.2016