Python 写的Hadoop小程序

2019-03-28 13:33|来源: 网络

该程序是在python2.3上完成的,python版本间有差异。

Mapper:

import sys

line_number = 0
tab_number = 0
pv_number = 0
clk_number = 0
if_compressed_tested = 0
if_compressed = 0

#functions:
def compressed_stat(line):
    global line_number
    global tab_number
    global pv_number
    global clk_number
    try:
        line_number += 1
        line_split_list = line.split("\t")
        line_split_list_size = len(line_split_list)
        tab_number += (line_split_list_size - 1)
        index = 1
        while index < line_split_list_size:
            pv_clk_list = line_split_list[index].strip().split(" ")
            pv_number += int(pv_clk_list[0])
            clk_number += int(pv_clk_list[1])
            index += 1
    except ValueError:
        print line,"\tERROR"


def before_compress_stat(line):
    global line_number
    global pv_number
    global clk_number
    try:
        line_number += 1
        line = line.strip()
        line_split_list = line.split(" ")
        pv_number += int(line_split_list[0])
        clk_number += int(line_split_list[1])
    except ValueError:
        print line,"\tERROR"
#end functions  
  

for line in sys.stdin:
    try:
        line = line.strip()
        if if_compressed_tested == 0:
            if_compressed_tested = 1
            if line.find("\t") > 0:
                if_compressed = 1
        if if_compressed == 0:
            before_compress_stat(line)
        else:
            compressed_stat(line)
    except ValueError:
        pass
if if_compressed == 1:
    print ("%ld %ld %ld %ld"%(line_number, tab_number, pv_number,clk_number))
else:

    print ("%ld %ld %ld"%(line_number,pv_number,clk_number))

Reducer:
import sys


line_number = 0
tab_number = 0
pv_number = 0
clk_number = 0
if_compressed_tested = 0
if_compressed = 0

def compressed_stat(line):
    global line_number
    global tab_number
    global pv_number
    global clk_number
    pv_clk_list = line.split(" ")
    if len(pv_clk_list) != 4:
        print line,"\tERROR"
    else:
        line_number += int(pv_clk_list[0])
        tab_number += int(pv_clk_list[1])
        pv_number += int(pv_clk_list[2])
        clk_number += int(pv_clk_list[3])

def before_compress_stat(line):
    global line_number
    global pv_number
    global clk_number
    pv_clk_list = line.split(" ")
    if len(pv_clk_list) != 3:
        print line,"\tERROR"
    else:
        line_number += int(pv_clk_list[0])
        pv_number += int(pv_clk_list[1])
        clk_number += int(pv_clk_list[2])
#

for line in sys.stdin:
    try:
        line = line.strip()
        if line.count("ERROR") > 0:
            print line
            continue
       
        if if_compressed_tested == 0:
            if_compressed_tested = 1
            if len(line.split(" ")) == 4:
                if_compressed = 1
            elif len(line.split(" ")) == 3:
                if_compressed = 0
            else:
                print line,"\tERROR"
                continue
           
        if if_compressed == 0:
            before_compress_stat(line)
        else:
            compressed_stat(line)
    except ValueError:
        print line, "\tERROR"
        pass
       
if if_compressed == 0:
    print "LINE_NUMBER:",line_number,"TOTAL_PV_NUMBER:",pv_number, "TOTAL_CLK_NUMBER:",clk_number
else:
    print "LINE_NUMBER:",line_number,"TAB_NUMBER",tab_number,"TOTAL_PV_NUMBER:",pv_number, "TOTAL_CLK_NUMBER:",clk_number

相关问答

更多
  • 印象中是通过标准输入输出来实现数据的传递的。 另外需要一个东西连接hadoop 与python。就是通过标准输入输出连接。 那个东西本身将hadoop的api封装。 我估计可能原因有两个: 1.没有输入绝对路径。你用的是相对路径。这个可能不成。 2.你可能需要一个插件,连接HADOOP与python 看你的算法好象是在做协同过滤的准备工作。 这个协同过滤单机就可以跑得很快。几十分钟就算完了。
  • sudo apt-get install python-dev 一般安装系统的时候其实python已经自带了,这步基本可以不用做,OK,我们继续往下走吧,安装python-opencv ,稍后我们需要用到opencv的库,一行指令即可,这也是小编特别喜欢linux的原因: sudo apt-get install python-opencv 完成之后我们开始操作吧,首先同样的我们打开摄像头露个脸呗,不多说,上代码, vim pythonpractice.py 打开vim,copy以下代码即可(友情提示 py ...
  • QUOTE:原帖由 准备早起的鸟 于 2007-10-27 22:57 发表 Python可以写Web应用程序么?好像行吧?哪位可以给偶个留言板或是记数器之类的小源码,研究一下。。谢谢。。最好是只操作文本的。。 Apache 有mod_python 模块, 支持用python开发Web App.当然也有一些python 写的的应用服务器,诸如Zope之类的.Python 的一个大好处是和C/C++结合得很好,用C/C++写扩展模块很容易,对于CPU时间敏感的部分可以用C/C++来开发.
  • PTVS(Python Tools for Visual Studio)是一个VS下的Python开发插件; 下载安装就可以直接使用了!
  • def astrcmp(str1,str2): return str1.lower()==str2.lower()
  • import math #导入模块/库 for i in range(1,10): #for循环语句 print math.sin(i) #print 输出 for j in range(100): if j%2==0: #if 条件判断语句 print j,"是偶数" else: print j,"是奇数" data=[1,2,'c','d',5] #列表 print data[2] #列表索引,输出结果为c #循环、判断、列表等等,这是最基础的
  • 用python写小程序[2021-09-29]

    如果无需界面程序, 2楼回答的已经是一个阶梯思路了。 如果一定要界面,算法还是一样的,只不过需要在界面上多加点功夫。
  • 看了你的问题,几个回答似乎都不完全对。 给你补充一下吧。

    你的问题与flask基本上没有关系。flask是一个简单的微型编程框架,很优美,也很简单好用。不过它仅仅实现了基于HTTP协议的服务端交互部分。

    一个界面设计除了服务端交互,还需要本地交互(用JS, flash实现),最重要的还是需要客户端界面(用HTML+CSS+JS实现)。文件上传需要(JQUERY+UPLOADFILE库)

    从上面的回答看,你 ...

  • 你可以选择一本python方面的书籍,一版教程上都有讲到python如何进行图形界面程序开发。 一般的python是通过使用图形界面库快速开发图形程序。库有好多种。教程里一般都有介绍。各有优缺点。 默认安装了python就自带一个图形界面库,那就是Tkinter。python的自带编辑器和shell解释器就是这个界面。 除此之外用得比较广的还有wxpython库,等等。这些可以到网上了解了解。教程也有得看。使用起来相当方便。
  • 了解Kafka更多信息的最简单方法是使用http://landoop.com/docs/lenses/developers 您将需要运行1个docker - 在本地调出所有内容,然后开发Python应用程序,使用通过Kafka API连接到Kafka的相应Kafka库并向其生成消息 一旦你构建了你的应用程序 - 然后你可以打包它并对你的Hadoop的Kafka经纪人运行它 Easiest way to learn more about Kafka is to use http://landoop.com/d ...