本篇内容主要讲解“python map reduce的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python map reduce的方法是什么”吧!
执行shell脚本run.sh
#! /bin/bash
IN_DIR="/input/20140221"
OUT_DIR="/output/20140221"
HPHOME=$HADOOP_HOME/bin/
JAR_PACKAGE=$HADOOP_HOME/contrib/streaming/hadoop-streaming-0.20.2-cdh4u0.jar
MAP_FILE=$(pwd)/map.py
RED_FILE=$(pwd)/red.py
${HPHOME}hadoop fs -rmr $OUT_DIR
${HPHOME}hadoop jar $JAR_PACKAGE \
-numReduceTasks 1 \
-jobconf mapred.job.queue.name=platform \
-input $IN_DIR \
-output $OUT_DIR \
-file $MAP_FILE \
-file $RED_FILE \
-mapper $MAP_FILE \
-reducer $RED_FILE \
-inputformat SequenceFileAsTextInputFormat
exit $?
map.py
#!/usr/bin/env python
import sys
for line in sys.stdin:
line = line.strip()
if line.find("str1")!=-1:
item = line.split('\01')
key = item[3]
print '%s\t%s' % (key, 'str3')
elif line.find("str2")!=-1:
item = line.split('\01')
key = item[2]
value = item[5]
print '%s\t%s\t%s' % (key, 'str3', value)
else:
pass
red.py
#!/usr/bin/env python
from operator import itemgetter
import sys
word2count = {}
total_count = 0
total_money = 0.0
total_error = 0
pre_pid = ''
pre_money = 0.0
is_pre_push = 0
for line in sys.stdin:
line = line.strip()
if line.find('str3')!=-1:
item = line.split('\t')
total_money += float(item[2])
total_count += 1
else:
pass
print total_count, total_error, total_money ##最后才打印
仅作为参考
hadoop默认以'\t'分隔key和value,第一个字段为key
到reduce时,相同key的都在一起被同一个red.py处理,故可以连续读取相同key的每一行。(java中相同key的都以数组的形式放在一次reduce中了,而python却仍要读取多行,但相同key的都排在一起)
到此,相信大家对“python map reduce的方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/zmlblog/blog/206094