PIG суммирует соответствующие элементы в кортеже

У меня есть большая сумка кортежей, содержащих постоянное, но неизвестное количество целых чисел (более 200). Есть ли способ суммировать соответствующие элементы из этого кортежа?

Например, SUM_TUPLES({(1, 0, 1), (2, 1, 0)}) должно вернуть (3, 1, 1).

Я написал свою UDF на Python, но поскольку сумка и кортежи действительно огромны, я получаю GC limit exceeded error.

def SUM_TUPLES(tuple_bag):
    if not tuple_bag:
        return []
    result = len(iter(tuple_bag).next())*[0]
    for tup in tuple_bag:
        for i, ele in enumerate(tup):
            result[i] += ele
    return result

person Piotr Dabkowski    schedule 06.08.2015    source источник
comment
Содержат ли ваши данные какой-то другой столбец, кроме мешков? Или у вас есть только одна колонка с сумками, которые вы хотите добавить?   -  person Balduz    schedule 06.08.2015
comment
Данные имеют 4 столбца: 3 первых — это массивы символов, а последний — кортеж. Я группирую данные по 3 первым столбцам и хочу суммировать значения из сгруппированных кортежей (они помещаются в сумку групповой операцией)   -  person Piotr Dabkowski    schedule 06.08.2015


Ответы (1)


Уже ответили здесь

import operator
tuple_bag = (1, 0, 1), (2, 1, 0)
tuple(map(operator.add, *tuple_bag))
person Cyrbil    schedule 06.08.2015
comment
Моя функция делает то же самое, но проблема в эффективности PIG, я ищу более эффективный способ сделать это - может быть, какой-то встроенный в PIG UDF. - person Piotr Dabkowski; 06.08.2015