我正在通过stdin
读取输入(在reducer中使用hadoop流式传输)。
我需要检测最后一条记录何时进入。我正在stdin
数据上运行循环。
我首先尝试阅读stdin
以计算总记录数,然后再次阅读以继续进行业务处理,但只要我从stdin
读取记录
要计算total_cnt
,那么记录会从流中输出,稍后当我尝试阅读stdin
进行处理时,stdin
中没有记录。
total_cnt = 0
for line in stdin:
total cnt += 1
for line in stdin:
##Some Processing##
我不想将stdin
存储到某处并从该位置读取数据两次(1.总记录数和2.数据处理次数。)
有什么方法可以检测到最后一条记录来自stdin
吗?
我使用的是python版本2.7.11,需要在Hadoop reducer中实现这一点。
答案 0 :(得分:1)
每次进入新行时都会处理上一行。当循环退出时,line
会根据您的需要使用您最后一条未经处理的行。
示例:
old_line = None
for line in range(10):
if old_line is None:
old_line = line
continue # skip processing on the first loop: we'll make it up after
print "Do stuff with: %i" % old_line
old_line = line
print "Double last line: %i" % (line*2)
给出:
Do stuff with: 0
Do stuff with: 1
Do stuff with: 2
Do stuff with: 3
Do stuff with: 4
Do stuff with: 5
Do stuff with: 6
Do stuff with: 7
Do stuff with: 8
Double last line: 18