我想将list作为mapper中的值传递到reducer阶段。目前,reducer将列表作为字符串读取。有没有办法确保python可以将其解释为列表。
答案 0 :(得分:1)
Hadoop流媒体使用stdin
和stdout
进行通信;因此,进入每个后续工作的所有内容都将是一个字符串。您可以在表示中使用某种分隔符,例如逗号:
the, items, in, my, list
然后将它们拆分为你的reducer:
for line in sys.stdin:
data = line.split(',')
如果你想让它成为字典:
import ast
for line in sys.stdin:
dict = ast.literal_eval("{'waffle': 'delicious', 'pancake': 'mediocre'}")
由于您正在阅读标准输入流,因此无法知道它是一个列表。
答案 1 :(得分:1)
在reducer中使用ast.literal_eval('str_val')并将字符串转换为list。有关详细信息,请参阅https://docs.python.org/2/library/ast.html