Вот догадка. Сообщение:
TypeError: unsupported operand type(s) for +: 'int' and 'unicode'
относится к фрагменту:
map(sum,zip(*,input))
и что это означает, что вы пытаетесь взять сумму Юникода кортеж, например, [u'1', u'2']
, а не кортежем int, например. [1,2]
, как вы думаете, с кем работаете.
Если это так, то вы можете обернуть молнию внутри list comprehension сделать преобразование из юникода в целом:
[map(int, a) for a in zip(*,input)]
Но вы, возможно, другая ошибка таится. Судя по @outputSchema('aa:chararray')
, вы хотите вернуть список строк, а не одну строку; str([1,2])
есть "[1,2]"
и думаю, вы хотите ["1", "2"]
. Если это так (и это, возможно, не так что вы должны проверить), вы можете обернуть, что тоже в списке понимание:
aa = [str(s) for s in aa]
Включение этих двух изменений, ваш код становится:
@outputSchema('aa:chararray')
def func(input):
aa = map(sum,[map(int, a) for a in zip(*,input)])
aa = [map(str, a) for a in aa]
return aa
Если из это, вы не можете решить проблему, было бы полезно иметь больше информации. Например, указывает ли эта ошибка типа на определенную строку в вашем коде? Если да, то какая строка?
Возможно, вы можете показать, что тип input
или *
. Например изменить функцию из:
...
def func(input):
aa = map(sum,zip(*,input))
...
к:
def func(input):
print(map(type, input))
print(map(type, *))
aa = map(sum,zip(*,input))