我有以下数据集:
提供节目和该节目观众人数的数据集#1:
TVShow1,25
TVShow2,30
TVShow3,7
TVShow1,15
提供每个节目广播频道的数据集#2:
TVShow4,BBC
TVShow2,COM
TVShow1,TNT
TVShow3,TNT
我想计算TNT频道上每个节目的观众总数,例如
TVShow1 40
TVShow3 7
我有以下映射器:
#!/usr/bin/env python
import sys
for line in sys.stdin:
line = line.strip()
key_value = line.split(",")
key_in = key_value[0]
value_in = key_value[1]
if (value_in == 'TNT' or value_in.isdigit()):
print( '%st%s' % (key_in, value_in) )
和以下减速器:
#!/usr/bin/env python
import sys
prev_TV_show = " "
line_cnt = 0
tnt_found = False
curr_TV_show_total_cnt = 0
for line in sys.stdin:
line = line.strip()
key_value = line.split('t')
line_cnt = line_cnt+1
curr_TV_show = key_value[0]
value_in = key_value[1]
if curr_TV_show != prev_TV_show:
prev_TV_show = curr_TV_show
if (line_cnt>1 and tnt_found == True):
print('{0} {1}'.format(curr_TV_show,curr_TV_show_total_cnt))
tnt_found = False
curr_TV_show_total_cnt = 0
if (value_in == 'TNT'):
tnt_found = True
else:
curr_TV_show_total_cnt += int(value_in)
然后我测试了如下代码:
cat data_file*.txt | ./my_mapper.py | sort | ./my_reducer.py
然而,它认为第一行的观众总数是不正确的。它看起来像是合并在两个电视节目之间。代码中是否存在与管理第一行相关的错误?
我认为您的代码中有两个问题-
- 更新prev_TV_show会导致打印错误的值。你实际上想要打印带有'count的prev_TV_show,而不是当前_TV_show
- 打印最后一个迭代值-您需要在循环外添加一个额外的打印(+条件)