通过 python 使用 hadoop 流的 MapReduce - 将列表从映射器传递到缩减器并将其作为列表读取

MapReduce using hadoop streaming via python - Pass a list from mapper to reducer and Read it as a list

我想将列表作为值从映射器传递到缩减器 stage.Currently,缩减器将列表作为字符串读取。有什么方法可以确保 python 可以将其解释为列表。

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

the, items, in, my, list

然后将它们拆分到你的减速器中:

for line in sys.stdin:
    data = line.split(',')

如果您希望它成为字典:

import ast

for line in sys.stdin:
    dict = ast.literal_eval("{'waffle': 'delicious', 'pancake': 'mediocre'}")

虽然您正在读取标准输入流,但无法知道它是一个列表。

在 reducer 中使用 ast.literal_eval('str_val') 并将字符串转换为列表。更多信息可以参考https://docs.python.org/2/library/ast.html