通过 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 流使用 stdin
和 stdout
进行通信;因此,进入每个后续作业的所有内容都将是一个字符串。您可以在表示中使用某种分隔符,例如逗号:
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
我想将列表作为值从映射器传递到缩减器 stage.Currently,缩减器将列表作为字符串读取。有什么方法可以确保 python 可以将其解释为列表。
Hadoop 流使用 stdin
和 stdout
进行通信;因此,进入每个后续作业的所有内容都将是一个字符串。您可以在表示中使用某种分隔符,例如逗号:
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