0基础学习PyFlink——模拟Hadoop流程

学习大数据还是绕不开始祖级别的技术hadoop。我们不用了解其太多,只要理解其大体流程,然后用python代码模拟主要流程来熟悉其思想。
还是以单词统计为例,如果使用hadoop流程实现,则如下图。
在这里插入图片描述

为什么要搞这么复杂呢?
顾名思义,“大数据”意味着庞大的数据量需要计算。提升计算效率的方法无非如下:

  • 更高效的算法
  • 更高频率的处理器
  • 更多的可并行执行的流程
  • 更多的处理器

“更多的可并行执行的流程”意味着不同计算流程之间数据不存在前后依赖,这个也是GPU计算的基础。在这个前提下,我们又有足够多的处理器,则可以提升计算的并行度,大大缩短计算的时间。
沿着这个思路,我们该怎么做呢?

  1. 切分原始数据到符合计算的最小单元。
  2. 组合最小计算单元为可并行处理的数据单元。
  3. 执行并行计算。

以上图所表达的数据为例。
我们有一个一维数组,元素分别是“A C B”,"A E B"和“E C D”。
在这里插入图片描述
我们可以把它分成三个独立的数组
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这三个独立的数组可以再切分,这个切分可以并行执行,因为每组的切分和其他组没有任何关系。
[
[A,C,B]
[A,E,B]
[E,C,D]
]
在这里插入图片描述
作为一种通用的框架,需要协调好内部数据之间传输的格式。MapReduce正如其名,选择了Map结构来存储中间数据。如下图,切分后的字母为Key,Value是1(可以是个随意值)。
在这里插入图片描述
如上图,Map操作包括了Splitting和Mapping,它们将原始数据处理成若干个最小计算单元,且这个单元是内部通用结构map。
Mapping完的结构不适合高效的并行计算,因为数据存在关联关系。比如我们计算A的个数,则需要同时依赖第一组和第二组数据,没办法最大并行优化。
为了增加后续计算的可并行性,Reduce操作将这些最小计算单元归类(Shuffling&Sorting )。这个归类的过程的输入是一个个map,输出还是map。再次呼应了MapReduce的名字。
在这里插入图片描述
现在每组数据可以被独立分配到一个处理器上去计算了,因为它不依赖任何其他数据。比如计算A的个数,我们只要让一个处理器关注第一条数据,其他条数据根本不用关心。
最后的Reducing再将上述数据并行计算,它的输入和输出还是map,再次呼应MapReduce的名称。
在这里插入图片描述

基于上面的拆解,我们使用python实现逻辑如下。需要注意的是,在流程中,我们传递的都是dict结构(map,即key value对)。

input = ["A C B","A E B","E C D",
]def split_map_shuffle_reduce(input):# splittingwordsSplitMap = {}for (i, line) in zip(range(len(input)), input):wordsSplitMap[i] = line.split()# {0: ['A', 'C', 'B'], 1: ['A', 'E', 'B'], 2: ['E', 'C', 'D']}# mappingwords = {}for (i, wordsOneline) in zip(range(len(wordsSplitMap.values())), wordsSplitMap.values()):words[i] = map(lambda word: (word,1), wordsOneline)# {0: {'A': 1,'C': 1, 'B': 1}, 1: {'A': 1,'E': 1, 'B': 1}, 2: {'E': 1,'C': 1, 'D': 1}}# shufflingshuffle_sort_words = {}for wordmap in words.values():for word in wordmap:shuffle_sort_words.setdefault(word[0], []).append(word[1])# {'A': [1, 1], 'C': [1, 1], 'B': [1, 1], 'E': [1, 1], 'D': [1]}# reducingwordCount = {}for word, count in shuffle_sort_words.items():wordCount.update({word: sum(count)})# {'A': 2, 'C': 2, 'B': 2, 'E': 2, 'D': 1}return wordCountoutput = split_map_shuffle_reduce(input)
print(output)

{‘A’: 2, ‘C’: 2, ‘B’: 2, ‘E’: 2, ‘D’: 1}

参考资料

  • https://www.whizlabs.com/blog/understanding-mapreduce-in-hadoop-know-how-to-get-started/
  • https://www.tutorialspoint.com/map_reduce/map_reduce_introduction.htm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/165779.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xlive.dll下载安装方法分享,教你快速修复xlive.dll文件

在运行某些应用程序或游戏时,你可能会遭遇到"xlive.dll缺失"错误提示,这可能导致程序无法正常运行。本文将向你介绍一些可行的解决方法教你下载xlive.dll文件,并详细阐述xlive.dll是什么文件以及导致其缺失的原因。 一.理解"x…

Docker-镜像的备份迁移及私有仓库的搭建

一、Docker-备份与迁移 A服务器系统配置 B服务器系统配置 1.用命令将容器保存为镜像。 案例,将A服务器的Docker容器迁移到另外一台服务器B,A服务器的容器配置过对应的文件,不想在B服务器重新搭建,可以使用该案例。 docker c…

FL studio21永久激活码 附带一键下载安装包

玩音乐的朋友,对FL studio肯定不陌生,目前最新的版本是FL studio21,这是一款非常强大且专业的音频制作软件,而且还可以编曲、剪辑、录音、混音等等之类的创作操作,使你的计算机成为一个全功能录音室。下面小编就来和大…

抛砖引玉:Redis 与 接口自动化测试框架的结合

接口自动化测试已成为保证软件质量和稳定性的重要手段。而Redis作为一个高性能的缓存数据库,具备快速读写、多种数据结构等特点,为接口自动化测试提供了强大的支持。勇哥这里粗略介绍如何结合Python操作Redis,并将其应用于接口自动化测试框架…

Qt实现一个电子相册

一、要实现的功能 在窗口中可以显示图片,并且能够通过两个按钮进行图片的前进和后退的顺序切换。有一个按钮,通过这个按钮可以从所存图片资源中随机选取一个图片进行展示通过按钮可以控制图片自动轮播顺序切换的开始与停止,显示当前系统的时…

使用 LF Edge eKuiper 将物联网流处理数据写入 Databend

作者:韩山杰 Databend Cloud 研发工程师 https://github.com/hantmac LF Edge eKuiper LF Edge eKuiper 是 Golang 实现的轻量级物联网边缘分析、流式处理开源软件,可以运行在各类资源受限的边缘设备上。eKuiper 的主要目标是在边缘端提供一个流媒体软件…

大模型必备算力:CPUGPU天梯图(2023年最新版)

在当今计算机世界,CPU、GPU和显卡的性能成为了衡量计算机性能的重要指标。今天深入了解CPU、GPU和显卡天梯图。 首先,CPU作为计算机的大脑,负责处理各种任务。它的性能主要由核心数、主频和缓存大小决定。其中,核心数和主频决定了…

kubeadm初始化搭建cri-dockerd记录 containerd.io

07.尚硅谷_搭建K8s集群(kubeadm方式)-部署master节点_哔哩哔哩_bilibili 视频里的版本只有1.17而现在(2023.10.20)kubernetes最新版本是1.28,需要搭载cri-dockerd, 先去网站下载了对应的rpm包cri-dockerd…

计算机网络篇之TCP滑动窗口

文章目录 前言概述 前言 在网络数据传输时,若传输的原始数据包比较大,会将数据包分解成多个数据包进行发送。需要对数据包确认后,才能发送下一个数据包。在等待确认包的这个过程浪费了大量的时间,不过还好TCP引入了滑动窗口的概念…

2022最新版-李宏毅机器学习深度学习课程-P26 Recurrent Neural Network

RNN 应用场景:填满信息 把每个单词表示成一个向量的方法:独热向量 还有其他方法,比如:Word hashing 单词哈希 输入:单词输出:该单词属于哪一类的概率分布 由于输入是文字序列,这就产生了一个问…

【算法|动态规划No.27】leetcode516. 最长回文子序列

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

快速自动化处理JavaScript渲染页面的方法

目录 一、使用无头浏览器 二、使用JavaScript渲染引擎 三、使用前端框架工具 随着互联网技术的不断发展,JavaScript已经成为Web开发中不可或缺的一部分。然而,在自动化处理JavaScript渲染页面方面,却常常让开发者感到头疼。本文将介绍一些快…

02 开闭原则

官方定义: 开闭原则规定软件中的对象、类、模块和函数对扩展应该是开放的,但对于修 改是封闭的。这意味着应该用抽象定义结构,用具体实现扩展细节,以此确保 软件系统开发和维护过程的可靠性。 通俗解释: 对扩展开放…

基础MySQL的语法练习

基础MySQL的语法练习 create table DEPT(DEPTNO int(2) not null,DNAME VARCHAR(14),LOC VARCHAR(13) );alter table DEPTadd constraint PK_DEPT primary key (DEPTNO);create table EMP (EMPNO int(4) primary key,ENAME VARCHAR(10),JOB VARCHAR(9),MGR …

运营商大数据精准营销,击碎你的固化营销思维

大数据精准营销服务是大数据应用的典型场景之一,也是依托大数据和互联网提升企业效率的一种有效手段。但是,在选择大数据服务的很多时候,企业往往要考虑法律与合规的问题,其中比较重要的是数据获取渠道与数据是否脱敏。在所有大数…

Labview2023安装教程 (最新最详细保姆级教程)

目录 一 .简介 二.安装步骤 软件:Labview版本:2023语言:简体中文大小:2.73G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.6GHz 内存8G(或更高)下载通道①百度网盘丨下载链接: htt…

英语——分享篇——每日200词——2401-2600

2401——moisture——[mɔɪstʃə(r)]——n.潮气,湿气,水分——moisture——moist潮湿的(熟词)ur你的(编码your)e鹅(编码)——潮湿的地方你的鹅一身潮气——Moisture in the atmosphere condensed into dew during the night.——大气中的水分在夜间凝结…

微信小程序设计之主体文件app-json-pages

一、新建一个项目 首先,下载微信小程序开发工具,具体下载方式可以参考文章《微信小程序开发者工具下载》。 然后,注册小程序账号,具体注册方法,可以参考文章《微信小程序个人账号申请和配置详细教程》。 在得到了测…

【论文解读】Prefix-Tuning: Optimizing Continuous Prompts for Generation

一.介绍 1.1 前置知识 1.1.1 in-context learning At the limit, GPT-3 (Brown et al, 2020) can be deployed using in-context learning, which is a form of prompting, without modifying any LM parameters. "部署" 指的是将 GPT-3 模型用于实际应用或特定任务…

遗传算法求解旅行商问题(含python源代码)

目录 前言 编码初始化种群 计算适应度 选择 交叉 变异 完整代码 总结 前言 这次的算法有一点不能确定是否正确,希望有大佬能够批评指正。 遗传算法的一般步骤 编码初始化种群 种群(population)指同一时间生活在一定自然区域内&…