首页 > 编程语言 > 详细

python写mapReduce初步

时间:2019-04-21 00:58:38      阅读:127      评论:0      收藏:0      [点我收藏+]

最近在学了python了,从mapReduce开始 ,话不多说了,直接上代码了哈

 

map阶段,map.py文件

 1 import sys
 2 
 3 # 标准输入
 4 # 在终端的话,就需要这样了 cat a.txt | python map_new.py,通过一个管道的形式进行标准输入
 5 # strip 就是避免字符串前后有回车或者是隐含字符,一般对于字符串都要strip() 一下。
 6 
 7 for line in sys.stdin:
 8     # print(line.strip())
 9     ss = line.strip().split( )
10     for word in ss:
11         # word和1之间用制表符进行分割
12         print(\t.join([word.strip(),1]))

 

reduce阶段:reduce.py文件

map到reduce阶段要做一个排序,相同的key放到了一起

 1 import sys
 2 
 3 cur_word = None
 4 sum = 0
 5 
 6 for line in sys.stdin:
 7     ss = line.strip().split(\t)
 8     if len(ss) != 2:
 9         continue
10     word,cnt = ss
11 # 当读取第一行时,cur_word肯定是None吧
12     if cur_word == None:
13         cur_word = word
14     if cur_word != word:
15         # 当 cur_word 和 word不相等时,将其输出
16         print(\t.join([cur_word,str(sum)]))
17         cur_word = word
18         sum = 0
19 
20     sum += int(cnt)
21 # 对最后一行进行输出
22 print(\t.join([cur_word,str(sum)]))

 

还需要一个run.sh

HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"

INPUT_FILE_PATH_1="/1.data"
OUTPUT_PATH="/output"

$HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH

# Step 1.
$HADOOP_CMD jar $STREAM_JAR_PATH     -input $INPUT_FILE_PATH_1     -output $OUTPUT_PATH     -mapper "python map.py"     -reducer "python reduce.py"     -file ./map_new.py     -file ./red_new.py

# HADOOP_CMD: hadoop的bin的路径
# STREAM_JAR_PATH:streaming jar包的路径
# INPUT_FILE_PATH:hadoop集群上的资源输入路径
# OUTPUT_PATH:hadoop集群上的结果输出路径

 

执行和查看 

# cat data.txt | pyton map.py | sort -k1 | python reduce.py > result.txt
# cat result.txt | sort -k2 -rn | head

写的比较简单哈

 

python写mapReduce初步

原文:https://www.cnblogs.com/ssqq5200936/p/10743453.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!