apache pig - Writing UDF in Python for Pig -


i've struggled on problem several hours. hope can me. input bag structure, such {([1,2]),([3,4])}, , goal output sum of corresponding element of tuples in bag, (4,6). lot.

my code:

@outputschema('aa:chararray') def func(input):     aa = map(sum,zip(*,input))      aa = str(aa)     return aa 

typeerror: unsupported operand type(s) +: 'int' , 'unicode'

here guess. message:

 typeerror: unsupported operand type(s) +: 'int' , 'unicode' 

refers fragment:

  map(sum,zip(*,input))  

and means trying take sum unicode tuple, e.g. [u'1', u'2'] rather tuple of int's, e.g. [1,2] think working with.

if that's case, can wrap zip inside list comprehension conversion unicode int:

 [map(int, a) in zip(*,input)] 

but may have error lurking. judging @outputschema('aa:chararray') want return list of string, not single string; str([1,2]) "[1,2]" , think want ["1", "2"]. if that's case (and might not should check), wrap in list comprehension:

aa = [str(s) s in aa] 

incorporating these 2 changes, code becomes:

@outputschema('aa:chararray') def func(input):     aa = map(sum,[map(int, a) in zip(*,input)])     aa = [map(str, a) in aa]     return aa 

if this, can't solve problem, helpful have more information. example, type error point particular line in code? if so, line?

perhaps can show types of input or * are. example change function from:

 ...  def func(input):    aa = map(sum,zip(*,input))   ... 

to:

 def func(input):    print(map(type, input))    print(map(type, *))    aa = map(sum,zip(*,input)) 

Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -