2017-04-07 59 views
0

我正在通過stdin(hadoop streaming in reducer)讀取輸入。檢測python中標準輸入(stdin)中的最後一條記錄

我需要檢測最後一條記錄何時進入。我正在運行for循環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

見http://stackoverflow.com/a/24199042/5987 –

回答

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 
+0

完美!它工作正常。 – XEngineer

相關問題