Python 的 map 和 reduce 和 Hadoop 的 MapReduce 有什麼關係?
hadoop map階段所做的事 類比於 python maphadoop reduce階段所做的事 類比於 python groupby但只是類比,hadoop map階段和reduce階段有更具體細節的不同步驟,兩者牛頭無法對上馬嘴。
http://blog.damotou.info/2015/06/29/%E5%9B%BE%E8%A7%A3spark%E7%9A%84RDD%E7%BC%96%E7%A8%8B%E6%A8%A1%E5%9E%8B/
看我這篇博客吧
關係就是都是基於Map-Reduce的處理思想設計出來的。
從用戶角度看功能其實差不多,
Python的Map函數和Hadoop的Map階段對輸入進行逐行處理;
Python的Reduce函數和Hadoop的Reduce階段對輸入進行累積處理。
但是其實完整的Hadoop MapReduce是Map+Shuffle+Sort+Reduce過程。
其中Shuffle過程是為了讓分散式機群之間將同Key數據進行互相交換,Sort過程是根據Key對所有數據進行排序,從而才能完成類WordCount功能,而這兩步在Python裡面當然是需要用戶自己去編寫的。
著作權歸作者所有。
商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
作者:JThink_
鏈接:Python+Hadoop Streaming實現MapReduce(如何給map和reduce的腳本傳遞參數)
來源:CSDN博客
1. 上一篇我們提到用python 和 hadoop streaming的方式寫mapreduce,那麼我們怎麼向map和reduce的腳本傳遞參數呢,本來著重講這個
2. 我們知道用java寫mapreduce的時候可以傳參數給map或者reduce,具體的就是用Configuration去set值,然後在map或者reduce端用get進行獲取,這個就不多說了,不是本文重點3. 不多說,直接貼出來,#!/bin/bash hadoop fs -rmr trans_record/result hadoop jar ./hadoop-streaming-2.0.0-mr1-cdh4.7.0.jar -input $1 -output trans_record/result-file map.py
-file reduce.py -mapper "python map.py" -reducer "python reduce.py" -jobconf mapred.reduce.tasks=1 -jobconf mapred.job.name="qianjc_trans_record" -cmdenv "card_start=$2" -cmdenv "card_last=$3" -cmdenv "trans_at=$4" 我們可以看到比上一篇介紹的多了-cmdenv 其實這個就是傳參數的配置項,那麼我們在map或者reduce中怎麼取呢,如下:#!/usr/bin/env python
# vim: set fileencoding=utf-8 import sys import os def main(): card_start = os.environ.get("card_start") card_last = os.environ.get("card_last") trans_at = float(os.environ.get("trans_at")) for line in sys.stdin:detail = line.strip().split(",")
card = detail[0] money = float(detail[17]) if trans_at == money and card_start == card[1 : 7] and card_last == card[-4 : ]: print "%s %s" % (line.strip(), detail[1]) if __name__ == "__main__": main() os模塊可以取,給一個key就相應得能取到key對應的value 4. 這還是很簡單的,但是這個卻應該熟練掌握,畢竟比較重要
您好 我一名學生,現在的研究方向也是關於數據挖掘的,今天有幸看到您的文章里有關於 用python來實現mapreduce 程序,想請教一下您僅用python來寫實現mapreduce程序夠嗎 因為我學得是python ,但是了解到大部分的hadoop程序及框架都是用java來寫的,所以在這裡想問一下您是不是還需要繼續學習java來開發mapreduce 程序?希望得到您的指導
推薦閱讀:
※目前工作是單片機開發和C#上位機,未來該朝哪個方向發展,如何轉型嵌入式上層應用開發?
※學習程序語言也會像學外語一樣會受到母語(第一語言)的影響嗎?
※為什麼代碼注釋中有@符號?
※JDK 1.8.0_92 Arrays.sort()方法不可用?
※程序編碼都是外文的,什麼時候出中文啊,我有生之年能否看到!!!?