您好,登錄后才能下訂單哦!
本篇內容主要講解“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的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。