【发布时间】:2019-02-25 08:20:21
【问题描述】:
这应该很简单,我已经花了几个小时。
示例数据(名称、二进制、计数):
Adam 0 1
Adam 1 1
Adam 0 1
Mike 1 1
Mike 0 1
Mike 1 1
所需的示例输出(名称、二进制、计数):
Adam 0 2
Adam 1 1
Mike 0 1
Mike 1 2
每个名字都需要有自己的二进制key,0或1。根据二进制Key,对count列求和。注意所需输出中的“减少”。
我已经提供了一些我的代码,我正在尝试在 reducer 中不使用列表或字典。
""" Reducer 将名称与它们的二进制文件和部分计数相加
输入: 名称 \t 二进制 \t pCount
输出:
名称 \t 二进制 \t tCount
"""
import re
import sys
current_name = None
zero_count, one_count = 0,0
for line in sys.stdin:
# parse the input
name, binary, count = line.split('\t')
if name == current_name:
if int(binary) == 0:
zero_count += int(count)
elif int(binary) == 1:
one_count += int(count)
else:
if current_name:
print(f'{current_name}\t{0} \t{zero_count}')
print(f'{current_name}\t{1} \t{one_count}')
current_name, binary, count = word, int(binary), int(count)
print(f'{current_name}\t{1} \t{count}')
由于某种原因,它没有正确打印。 (通过的名字很时髦)我也不确定通过所有打印的最佳方法 one_count 和 zero_count 也显示其二进制标签。
任何帮助将不胜感激。谢谢!
【问题讨论】:
标签: python hadoop mapreduce hadoop-streaming reducers