当前位置: 首页 > news >正文

Spark RDD与MapReduce

什么是Map、什么是Reduce

MapReduce是一个分布式编程计算模型,用于大规模数据集的分布式系统计算。

我个人理解,Map(映射、过滤)就是对一个分布式文件系统(HDFS)中的每一行(每一块文件)执行相同的函数进行处理;

Reduce(规约、化简)就是对Map处理好的数据进行两两运算,因此reduce函数必须要有两个参数。

Map/Reduce的执行原理其实可以参考python的map/reduce函数:

https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00141861202544241651579c69d4399a9aa135afef28c44000

Spark中的MapReduce

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。

RDD也支持常见的MapReduce操作。

RDD操作:

    • 转换操作:

      每一次转换操作都会产生不同的RDD,供给下一个“转换”使用。转换得到的RDD是惰性求值的,并不会发生真正的计算,只是记录了转换的轨迹,只有遇到行动操作时,才会发生真正的计算。

      • filter(func):筛选出满足函数func的元素,并返回一个新的数据集

      • map(func):将每个元素传递到函数func中,并将结果返回为一个新的数据集

      • flatMap(func):与map()相似,但每个输入元素都可以映射到0或多个输出结果

      • groupByKey():应用于(K,V)键值对的数据集时,返回一个新的(K, Iterable)形式的数据集

      • reduceByKey(func):应用于(K,V)键值对的数据集时,返回一个新的(K, V)形式的数据集,其中的每个值是将每个key传递到函数func中进行聚合。

        reduceByKey 函数应用于(Key,Value)格式的数据集。 
        reduceByKey 函数的作用是把 key 相同的合并。 
        reduceByKey 函数同样返回一个(Key,Value)格式的数据集。 

    • 行动操作:

      行动操作是真正触发计算的地方。从文件中加载数据,完成一次又一次转换操作

      • count() 返回数据集中的元素个数

      • collect() 以数组的形式返回数据集中的所有元素

      • first() 返回数据集中的第一个元素

      • take(n) 以数组的形式返回数据集中的前n个元素

      • reduce(func) 通过函数func(输入两个参数并返回一个值)聚合数据集中的元素

      • foreach(func) 将数据集中的每个元素传递到函数func中运行。

Spark相关API文档

http://spark.apache.org/docs/latest/rdd-programming-guide.html

https://www.jianshu.com/p/4f074889bbd9

https://lixh1986.iteye.com/blog/2345420

转载于:https://www.cnblogs.com/kukri/p/10147830.html

相关文章:

  • 企业项目开发--切分配置文件
  • node下使用jquery
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • Analytics Zoo:在Apache Spark上实现分布式Tensorflow和BigDL管道的统一分析和AI平台
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • oracle问题 ORA-01843:not a valid month
  • 退款证书相关
  • 如何将本地文件上传至阿里云ECS中
  • React 作者关于 Hooks 的深度 issue,值得你阅读
  • 【AIX】在命令前显示完整路径
  • Promise,我是这么理解的!
  • python 怎样使用单个反斜杠\
  • 在IPv6之前
  • 数据挖掘领域经典算法——CART算法
  • JavaScript原型的实际应用
  • 2017年终总结、随想
  •  D - 粉碎叛乱F - 其他起义
  • es6要点
  • EventListener原理
  • Flannel解读
  • js中的正则表达式入门
  • PV统计优化设计
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Redis中的lru算法实现
  • SpringBoot几种定时任务的实现方式
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 从重复到重用
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 技术胖1-4季视频复习— (看视频笔记)
  • 前端面试之闭包
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • $().each和$.each的区别
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (2022 CVPR) Unbiased Teacher v2
  • (八)c52学习之旅-中断实验
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)socket Aio demo
  • (转)创业家杂志:UCWEB天使第一步
  • (转)大道至简,职场上做人做事做管理
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [codevs 1296] 营业额统计
  • [CTSC2014]企鹅QQ
  • [ERROR]-Error: failure: repodata/filelists.xml.gz from addons: [Errno 256] No more mirrors to try.
  • [go] 策略模式
  • [Hadoop in China 2011] 蒋建平:探秘基于Hadoop的华为共有云
  • [IDF]被改错的密码
  • [JavaEE] 线程与进程的区别详解
  • [LeetCode]-283. 移动零-1089. 复写零
  • [NHibernate]条件查询Criteria Query
  • [oeasy]python0004_游乐场_和python一起玩耍_python解释器_数学运算
  • [one_demo_12]递归打印*\n*.*.\n*..*..\n图形
  • [one_demo_17]使用传统方式实现线程间通信的例子