2016-10-10 73 views
0
#!/usr/bin/env python 

import sys 

# input comes from STDIN (standard input) 
for line in sys.stdin: 
    line = line.strip() 
    words = line.split() 
    fulldate = words[1] 
    year = fulldate[0:4] 
    print '%s\t%s' % (year, words[15]) 

被映射到單詞[15]中的值是來自第16列的txt文件的溫度值(或計算機計數的15- 15)。 ftp://ftp.ncdc.noaa.gov/pub/data/uscrn/products/daily01/2010/CRND0103-2010-AK_St._Paul_4_NE.txtHadoop map減少移除小於或大於映射器的值

正如你所看到的第一個10-20結果顯示-9999。其餘的是0到100之間的數字。

我想在發送到reducer之前過濾掉這些-9999值。我怎樣才能做到這一點?

回答

0

它應該很簡單,跳過你不想要的。如果該值是不是你想要的範圍,只是不打印出來,如:

#!/usr/bin/env python 

import sys 

# input comes from STDIN (standard input) 
for line in sys.stdin: 
    line = line.strip() 
    words = line.split() 
    fulldate = words[1] 
    year = fulldate[0:4] 
    if words[15] >= 0 && words[15] <= 100 
     print '%s\t%s' % (year, words[15]) 

這是罰款不爲每個輸入記錄的輸出,甚至產生多種輸出記錄每個輸入(通過做多個打印)如果應用程序需要它。