python實現mapreduce(1)——模擬MR過程


目的:通過python模擬mr,計算每年的最高氣溫。

1. 查看數據文件,需要截取年份和氣溫,生成key-value對。

[tianyc@TeletekHbase python]$ cat test.dat
0067011990999991950051507004...9999999N9+00001+99999999999...
0043011990999991950051512004...9999999N9+00221+99999999999...
0043011990999991950051518004...9999999N9-00111+99999999999...
0043012650999991949032412004...0500001N9+01111+99999999999...
0043012650999991949032418004...0500001N9+00781+99999999999...

2. 編寫map,打印key-value對
[tianyc@TeletekHbase python]$ cat map.py
import re
import sys
for line in sys.stdin:
  val=line.strip()
  (year,temp)=(val[15:19],val[40:45])
  print "%s\t%s" % (year,temp)
[tianyc@TeletekHbase python]$ cat test.dat|python map.py
1950 +0000
1950 +0022
1950 -0011
1949 +0111
1949 +0078

3. 將結果排序
[tianyc@TeletekHbase python]$ cat test.dat|python map.py |sort
1949 +0078
1949 +0111
1950 +0000
1950 -0011
1950 +0022

4. 編寫redurce,對map中間結果進行處理,生成最終結果
[tianyc@TeletekHbase python]$ cat red.py
import sys
(last_key,max_val)=(None,0)
for line in sys.stdin:
  (key,val)=line.strip().split('\t')
  if last_key and last_key!=key:
    print '%s\t%s' % (last_key, max_val)
    (last_key, max_val)=(key,int(val))
else:
  (last_key, max_val)=(key,max(max_val,int(val)))
if last_key:
  print '%s\t%s' % (last_key, max_val)

5. 執行。
[tianyc@TeletekHbase python]$ cat test.dat|python map.py |sort|python red.py
1949 111
1950 22

后繼測試參見 python實現mapreduce(2)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM