3.1 python版MapReduce基础实战

这篇具有很好参考价值的文章主要介绍了3.1 python版MapReduce基础实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

输入文件在你每次点击评测的时候,平台会为你创建,无需你自己创建,只需要启动HDFS,编写python代码即可。文章来源地址https://www.toymoban.com/news/detail-722004.html

第1关:成绩统计

  1. mapper.py
#! /usr/bin/python3

import sys

def main():
    for line in sys.stdin:
        line = line.strip()
        mapper(line)

# 使用name,age分别表示姓名和年龄
def mapper(line):
    ##########  begin      ############
    
    group = line.split('\\n')
    for people in group:
        if len(people.strip()) == 0:
            continue
        name, age = people.split(' ')

    ###########  End  #################

        print("%s\t%s" % (name, age))


if __name__ == '__main__':
    main()
  1. reducer.py
#! /usr/bin/python3

import sys
from operator import itemgetter
# 找出values的最大值,并按name\tmax_age的形式输出。
def reducer(k, values):
    ##### Begin #########

    print("%s\t%s" % (k,max(values)))
    #####  End  #########

############################################# 
# mapper的输出经过分区处理后,数据行按照键排序;   
# 具有相同键的行排在一起;                      
# hadoop-streaming不会合并相同键的各个值。      
# 下面的代码将相同键的各个值放到同一个列表中,     
# 并调用reducer函数实现找出每个人的最大年龄并输出;
# 输出格式为:姓名\年龄                        
#############################################

def main():
    current_name = None
    ages = []
    name, age = '', 0
    for line in sys.stdin:
        line = line.strip()
        name, age = line.split('\t', 1)
        age = int(age)

        if current_name == name:
            ages.append(age)
        else:
            if current_name:
                reducer(current_name, ages)
                ages = []
            
            ages.append(age)
            current_name = name
    # 不要忘记最后一个人
    if current_name == name:
        reducer(current_name, ages)

if __name__ == '__main__':
    main()

第2关:文件内容合并去重

  1. mapper.py
#! /usr/bin/python3
import sys

def main():
    for line in sys.stdin:
        line = line.strip()
        mapper(line)

def mapper(line):
    ########## Begin  ###############
    items = line.split('\\n') 
    
    for item in items:
        key,value = item.split() 
        print("%s\t%s" % (key,value))
   ###########  End    #############
if __name__ == '__main__':
    main()
  1. reducer.py
#! /usr/bin/python3

import sys

def reducer(k, values):
    ############  Begin   ################

    value = sorted(list(set(values)))
    for v in value:
        print("%s\t%s" % (k,v))
    ############   End    ################

def main():
    current_key = None
    values = []
    akey, avalue = None, None
    for line in sys.stdin:
        line = line.strip()
        akey, avalue = line.split('\t')
        
        if current_key == akey:
            values.append(avalue)
        else:
            if current_key:
                reducer(current_key, values)
                values = []
  
            values.append(avalue)
            current_key = akey
    
    if current_key == akey:
        reducer(current_key, values)

if __name__ == '__main__':
    main()
        

第3关:信息挖掘 - 挖掘父子关系

  1. mapper.py
#! /usr/bin/python3
  
import sys

def mapper(line):
    ###############  Begin   ############
    
    
 
    items = line.split("\\n")
    for item in items:
        child,parent = item.split()
        print("%s\t%s" % (child,"p-"+parent))
        print("%s\t%s" % (parent,"c-"+child))


    
    
    ###############   End    #############

def main():
    for line in sys.stdin:
        line = line.strip()
        if line.startswith('child'):
            pass
        else:
            mapper(line)

if __name__ == '__main__':
    main()

  1. reducer.py
#! /usr/bin/python3

import sys

def reducer(k, values):
    ##############    Begin    ################
    
    grandc = []
    grandp = []
    for value in values:
        if value[:2] == 'c-':
            grandc.append(value[2:])
        elif value[:2] == 'p-':
            grandp.append(value[2:])
    
    for c in grandc:
        for p in grandp:
            print("%s\t%s" % (c,p))

    
    
    
    
    
    ##############   End      #################

def main():
    current_key = None
    values = []
    akey, avalue = None, None
    print("grand_child\tgrand_parent")
    for line in sys.stdin:
        line = line.strip()

        try:
            akey, avalue = line.split('\t')
        except:
            continue
        if current_key == akey:
            values.append(avalue)
        else:
            if current_key:
                reducer(current_key, values)
                values = []
            values.append(avalue)
            current_key = akey
    if current_key == akey:
        reducer(current_key, values)

if __name__ == '__main__':
    main()


到了这里,关于3.1 python版MapReduce基础实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • hadoop学习:mapreduce入门案例二:统计学生成绩

    这里相较于 wordcount,新的知识点在于学生实体类的编写以及使用 数据信息: 1. Student 实体类 2.  mapper 阶段,StudentMapper 类 3. reduce 阶段,StudentReduce 类 4. 驱动类,studentDriver 类

    2024年02月11日
    浏览(43)
  • 统计基础:3.1_假设检验综述

      假设检验的思想和方法是根据小概率原理,具体地说当我们对问题提出原假设H0和备注假设H1,并要检验H0是否可信时,可以先假设H0是正确的,在此假设下,经过一次抽样,若发生小概率事件,可以根据“小概率事件在一次实验中几乎是不可能发生的”的理由,怀疑原假

    2024年02月11日
    浏览(39)
  • 以实战学习pandas使用方式:统计考生成绩统计及分布

    老顾日常工作,是用不到 python 的,所以,老顾的 python 学习进度推进的非常缓慢,至今没用上 pandas 和 numpy,即便参加了新星计划艾派森的学习小组,也没什么动力去看这方面的内容。 结果,昨天在群里,有个小伙伴问老顾能不能帮忙做个数据统计。由于老顾最近准备开营做

    2024年02月03日
    浏览(50)
  • 头歌大数据——HBase 伪分布式环境搭建

    第1关:HBASE伪分布式环境搭建 编程要求 好了,到你啦,你需要先按照上次实训——HBase单节点安装的方式将 HBase 安装在 /app 目录下,然后根据本关知识配置好伪分布式的 HBase ,最后点击测评即可通关。 测试说明 程序会检测你的 HBase 服务和 Hadoop 服务是否启动,以及伪分布

    2024年02月08日
    浏览(64)
  • 头歌大数据作业二:搭建Hadoop环境及HDFS

    课外作业二:搭建Hadoop环境及HDFS 作业详情 内容 阿里云-云起实验室-《搭建Hadoop环境》-Hadoop-2.10.1伪分布式: 1.截图本实验ECS的公网IP地址,并添加彩色框标注,如下图所示: 2.步骤6.启动Hadoop成功之后,截图并添加彩色框标注,如下图所示 3.hdfs 根目录创建文件夹(文件夹命

    2024年02月08日
    浏览(53)
  • Python123:统计学生成绩、统计学生平均成绩与及格人数、成绩转换(C语言)

    1、统计学生成绩 题目 :本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则: 大于等于90分为A; 小于90且大于等于80为B; 小于80且大于等于70为C; 小于70且大于等于60为D; 小于60为E。 输入格式: 输入在第一行中给出

    2024年02月06日
    浏览(59)
  • Python编程习题(40):python-列表:统计考试成绩

    将一组考试成绩通过键盘输入,计算及格率、平均分、最高分和最低分。 输入格式: 成绩在一行输入,数据间用空格分隔。 输出格式: 输出及格率、平均分、最高分、最低分,精确到小数后1位。 见样例 输入样例: 输出样例: 解答代码: 

    2024年02月11日
    浏览(50)
  • 文件中的成绩统计分析----Python

    现在一个包含若干学生学习成绩的文件,每位同学有4 门课程的成绩,按要求完成以下任务。 文件中每行数据格式如下: 0121801101266,刘雯,92,73,72,64 0121801101077,张佳喜,81,97,61,98 … 0121801101531,佘玉龙,73,89,81,93 读取附件文件中的数据,对数据进行处理,计算每个同学 4 门课程成绩

    2024年02月07日
    浏览(41)
  • python 成绩统计,输出及格率和优

    题目描述: 小蓝给学生们组织了一场考试,卷面总分为100分,每个学生的得分都是一个0到100的整数。 如果得分至少是60分,则称为及格。如果得分至少为85分,则称为优秀。 请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。 输入: 输入的第一行包

    2024年02月05日
    浏览(46)
  • 【云计算与大数据计算】Hadoop MapReduce实战之统计每个单词出现次数、单词平均长度、Grep(附源码 )

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 下面通过WordCount,WordMean等几个例子讲解MapReduce的实际应用,编程环境都是以Hadoop MapReduce为基础 WordCount用于计算文件中每个单词出现的次数,非常适合采用MapReduce进行处理,处理单词计数问题的思路很简单,在 Map阶段处理每

    2024年02月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包