通过python使用hadoop流式传输MapReduce - 将一个列表从mapper传递给reducer并将其作为列表读取

时间:2015-08-07 19:35:05

标签: python hadoop mapreduce hadoop-streaming

我想将list作为mapper中的值传递到reducer阶段。目前,reducer将列表作为字符串读取。有没有办法确保python可以将其解释为列表。

2 个答案:

答案 0 :(得分:1)

Hadoop流媒体使用stdinstdout进行通信;因此,进入每个后续工作的所有内容都将是一个字符串。您可以在表示中使用某种分隔符,例如逗号:

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