检测python

时间:2017-04-07 18:29:04

标签: python python-2.7

我正在通过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中实现这一点。

1 个答案:

答案 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