3.1 python版MapReduce基础实战

2023-05-16

输入文件在你每次点击评测的时候,平台会为你创建,无需你自己创建,只需要启动HDFS,编写python代码即可。

第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()


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3.1 python版MapReduce基础实战 的相关文章

  • 嵌入式工作会越来越少吗?

    学习技术并非易事 xff0c 就像唐僧取西经 xff0c 需要经历皮肉之苦和精神上的折磨 学习最迷茫的无非是不确定自己能否学会 xff0c 学会以后能否落地 xff0c 给自己事业赋能 这种焦虑伴随着我当初整个自学过程 xff0c 直到找到
  • 解决ubuntu linux触摸板不能用问题

    解决ubuntu linux触摸板不能用问题 2011 04 16 01 40 其实很简单 xff1a 打开终端 xff0c 然后sudo i获取root权限 xff0c 然后 xff1a sudo modprobe r psmouse s
  • 一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc

    大家好 xff0c 我是无际 有一周没水文了 xff0c 俗话说夜路走多了难免遇到鬼 最近就被一个热心网友喷了 说我的文章没啥营养 xff0c 所以今天来一篇烧脑的 哈哈 xff0c 开个玩笑 xff0c 不要脸就没人能把我绑架 主要是最近
  • spi协议时序图和四种模式实际应用详解

    大家好 xff0c 我是无际 上个章节我们讲解了spi接口定义 xff0c 今天我们更加深入讲解下spi协议时序图和spi四种模式的用法 刚开始接触单片机开发时 xff0c 最怕就是看时序图 xff0c 对于我来说就是奇怪的知识 特别是SP
  • 你用esp8266做出过什么有趣的东西?

    曾经有个40多岁的老板跟我说 xff0c 很羡慕我这种做技术的 xff0c 他也喜欢钻研 xff0c 感觉自己做产品很有成就感 男人是天生的小朋友 xff0c 都喜欢玩 xff0c 都喜欢钻研 我做单片机开发11年了 xff0c 深感技术的
  • stm32正点原子和普中或是野火哪个好?

    看了很多热心网友对正点原子 野火 普中等开发板的对比和评论 说这个讲的不行 xff0c 那个代码写得垃圾 xff0c 还有谁谁谁的像一坨屎 说真的 xff0c 有种卸磨杀驴的感觉 为什么这么说 xff1f 因为忽略了两个问题 xff1a 1
  • 嵌入式Linux和stm32区别? 之间有什么关系吗?

    本人从事嵌入式单片机开发11年 xff0c 很多人对嵌入式 单片机 STM32 Linux傻傻分不清楚 导致学习过程走了很多弯路 xff0c 明明只需要几个月学习时间 xff0c 却浪费了1 2年 xff0c 最后抱怨嵌入式也太高了吧 xf
  • 为什么有些人说单片机简单,我学起来这么吃力?

    相信我 xff0c 你不是学不会 xff0c 只是没找对方法 看完这篇文章 xff0c 你就发现原来自己学起来并没那么吃力 开始前点赞 43 收藏赶紧点起来 xff0c 不然我怕你看得太入神 xff0c 下次想看都找不到 很多人学单片机从入
  • 嵌入式系统中,FLASH中的程序代码必须搬到RAM中运行吗?

    这个问题 xff0c 核心还是得看你用什么芯片方案 xff01 嵌入式系统涉及技术栈特别庞大 xff0c 不仅仅大家理解的ARM 43 Linux而已 我从业11年 xff0c 也只敢说对其中一个方向熟悉而已 嵌入式系统中 xff0c 核心
  • stm32入门开发板选野火还是正点原子呢?

    两个可以说都是行业标杆 不能说哪个比哪个更好 xff0c 各有特色 xff0c 适合自己就是最好的 xff0c 同行之间都是相互参考去做的 我从以下几个维度来对比下 xff1a 1 教程 2 代码 3 开发板价格 4 进阶 一 教程 两家教
  • 树莓派为什么涨价了?

    任何东西涨价都是一个原因 xff1a 供不应求 别说树莓派 xff0c 很多芯片都涨价了 xff0c 比如说STM32 xff0c 去年最高峰涨了将近10倍 所以 xff0c 引发了很多有趣的事 比如说 xff1a 以前接到订单老板开心得睡
  • jtag和swd区别,该用哪个?

    我刚开始学习单片机是STC最经典的STC89C52RC 导致我后面很多51的产品应用都会选择STC xff0c 一方面是因为熟悉 xff0c 一方面是使用确实很方便 其中最让我满意的就是烧录 xff0c 可以直接用串口就可以下载程序 xff
  • 匈牙利算法原理与Python实现

    匈牙利算法原理与Python实现 今天学习一个新的算法 匈牙利算法 xff0c 用于聚类结果分析 xff0c 先用图表示我当前遇到的问题 xff1a 这两列值是我用不同算法得到的聚类结果 xff0c 从肉眼可以看出第一列聚类为0的结果在第二
  • STM32之后哪块板子发展最好?

    从事开发10年了 xff0c 我来说说我个人见解 首先 xff0c 除非是顶尖的垄断技术 xff0c 否则一般不会有屹立不倒的芯片 站在研发经理的角度 xff0c 单片机选型时主要会考虑以下几个因素 xff1a 1 稳定性 2 价格 3 交
  • stm32用什么软件编程烧写比较好呢?

    今天给大家分享我从业单片机开发11年必备的神器 在刚入行不久 xff0c 看到那些老工程师费很大的劲去搭建开发调试环境 xff0c 让我很不解 我想有那工夫 xff0c 我程序都写完了 xff0c 如果有问题就看代码找Bug呗 直到后面做了
  • 嵌入式开发要学多久?要学哪些课程

    曾经有新手和我抱怨 xff1a 为什么嵌入式开发这么难 xff1f 相信我 xff0c 你不是学不会 xff0c 只是没找对方法 这是一片真正为 终结迷茫 而生的回答 xff0c 内容有点长 xff0c 如果你赶时间 xff0c 建议先点赞
  • 单片机volatile关键字的作用?

    最近我们无际单片机学员在做stm8和stm32项目的时候 xff0c 问volatile这个关键词怎么理解 xff1f 有什么作用 xff1f Volatile是C语言的一个关键字 xff0c 在stm8和stm32的固件库里也会经常看见这
  • STC89C51单片机相比于其他单片机具有那些优点?

    STC89C51只适合和同性能的51内核单片机相比 xff0c 性能不同并无可比性 11年前 xff0c 我就是通过自学STC89C51入行单片机开发的 到目前为止都非常经典 xff0c 很多开发板都是基于这个芯片去做的 我对STC单片机也
  • 单片机怎么实现真正的多线程?

    所谓多线程都是模拟的 xff0c 本质都是单线程 xff0c 因为cpu同一时刻只能执行一段代码 模拟的多线程就是任务之间快速切换 xff0c 看起来像同时执行的样子 据说最近有多核的单片机 xff0c 不过成本应该会高很多 对于模拟的多线
  • 单片机能运行操作系统吗?

    先直接上答案 xff1a 可以 xff01 但是操作系统不是刚需 xff0c 上操作系统比较占用单片机的资源 xff0c 比如占用比较多的FLASH和RAM xff0c 间接增加了硬件成本 xff0c 哪怕成本增加1毛钱 xff0c 对于上

随机推荐

  • stm32 单片机主要优点有哪些?

    STM32我用了近10年了 xff0c 用它做过的项目至少也有10几个 可以说是我用过单片机里 xff0c 最省心最好用的 xff0c 不会有乱七八糟的问题 我感觉STM32这几年这么热门 xff0c 开发板至少占了一半功劳 不过 xff0
  • 初学stm32单片机可以做什么简单的小作品?

    已从事单片机开发十几年 xff0c 刚开始接触单片机时 xff0c 感觉挺有意思 可以用自己的思维写程序 xff0c 控制硬件去实现一些智能化的操作 刚点亮第一个LED xff0c 就开始幻想以后能做任何自己想要的产品 xff0c 那感觉多
  • 微机原理,有啥书籍推荐?

    我从事了单片机开发十几年 xff0c 很惭愧 xff0c 没有完整看完一本技术书籍 刚入行那会 xff0c 看过模电 xff0c 给我的感觉就是 xff0c 这书不是给新手看的 xff0c 是给专家看的 xff0c 果断放弃 后面又看了一些
  • public/private/protected的具体区别

    1 public xff1a public表明该数据成员 成员函数是对所有用户开放的 xff0c 所有用户都可以直接进行调用 2 private xff1a private表示私有 xff0c 私有的意思就是除了class自己之外 xff0
  • 单片机中有FLASH为啥还需要EEROM?

    这是一片真正为 终结懵逼 而生的回答 看完如果还不懂 xff0c 那就多看几遍 以前我做项目 xff0c 有时用Flash xff0c 有时用EEPROM xff0c 搞得我有点懵逼 然后在网上搜了一些资料 xff0c 看完以后还是不能理解
  • 嵌入式软件去哪个公司好?

    从事嵌入式单片机开发十几年 xff0c 碰到坑逼公司无数 这篇文章不会直接给你说什么公司好 xff0c 而是根据我的惨痛经历 xff0c 聊聊什么公司值得去 很多人说去越大的公司越好 xff0c 在大公司里 xff0c 你如同蝼蚁 xff0
  • 该不该放弃嵌入式,单片机这条路?

    本文几乎浓缩了我从业10几年的精华 xff0c 内容 涵盖我转行 打工 创业的经历 建议从头到尾不要错过一字一句 xff0c 因为字里行间的经验之谈 xff0c 或许能成为你人生重要转折点 全文 3700 多字 xff0c 写了 6 个多小
  • 集成学习(Ensemble Learning)

    集成学习Ensemble Learning Ensemble LearningDefinitionCommon types of ensemblesBootstrap aggregating Bagging BoostingStacking
  • 入住CSDN第一天

    对CSDN的个人看法 缺点 其实我对CSDN不感冒 xff0c 因为多年来一直在 简述 上面编写自己的博客 xff0c hexo 搭建个人博客 我对哪些必须扫码注册登录才能看复制 xff0c 必须花钱充钱才能下载资源的平台表示不喜欢 CSD
  • 前端技术文档

    前端技术大纲 首先声明需要CSS xff0c html xff0c xff08 js xff09 技术可不不用太深但是必须会一点 1 vue vueCDNvue Clivue routervue loadervue api 所有方法vue
  • 英雄手游版教程

    Android教程 百度搜索 ourplay 翻墙注册 Google 或者 拳头 或者 facebook 账号启动游戏 IOS教程 下载加速器个人推荐 迅雷 因为其他的都要收费搜索下载英雄联盟启动游戏
  • vue component

    component Vue component 39 todoItem 39 template 96 lt p gt 这是一个代办项 lt p gt 96 lt div gt lt todo ttem gt lt div gt 当vue实例
  • vue监听对象的用法

    watch监听对象 data return obj name 34 JackMe 34 watch 39 obj 39 handler newValue oldValue console log newValue name oldValue
  • VSCODE无法使用cnpm

    这里写自定义目录标题 简单暴力 简单暴力 1 xff0c 右击VSCode图标 xff0c 选择以管理员身份运行 xff1b 2 xff0c 在终端中执行get ExecutionPolicy xff0c 显示Restricted xff0
  • Win10环境下不同版本WinGW切换

    因需要 xff0c 安装了不同版本的WinGW gcc xff0c 实际使用中遇到一些问题 xff0c 解决过程记录如下 xff1a 在使用BusMaster时需要4 8 1版本 xff0c 原本系统默认9 2 0 xff0c busmas
  • 【无标题】

    这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题 xff0c 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中 居左 居右SmartyP
  • expo优势

    优点一 xff1a 一条命令生成apk或者ipa文件 xff0c 方便发布到应用商店 优点二 xff1a 代码publish xff0c 应用内热更新 优点三 xff1a 比react native多出不少实用原生组件 xff0c 比如一些
  • C++一些常见问题

    关于赋值的疑问 1 编译器为每个类默认重载了赋值操作符 xff1b 2 默认的赋值操作符仅完成了浅拷贝 xff1b 3 当需要进行深拷贝时必须重载赋值操作符 xff1b 4 赋值操作符与拷贝构造函数有相同的存在意义 实例分析 xff1a s
  • 树莓派学习(二):更换镜像源以及安装虚拟环境miniforge3

    树莓派学习 xff08 二 xff09 xff1a 更换镜像源以及安装pytorch 步骤一 xff1a 更换镜像源步骤二 xff1a 下载前的准备2 1 原来numpy库的卸载 步骤三 xff1a 安装miniforge3 步骤一 xff
  • 3.1 python版MapReduce基础实战

    输入文件在你每次点击评测的时候 xff0c 平台会为你创建 xff0c 无需你自己创建 xff0c 只需要启动HDFS xff0c 编写python代码即可 第1关 xff1a 成绩统计 mapper py usr bin python3