林子雨-Spark入门教程(Python版)-学习笔记(二)
第3章 Spark编程基础
从文件加载数据
从文件系统中加载数据创建RDD——textFile()方法,该方法把文件的URI作为参数
注意:
(1)本地文件系统的路径,必须要保证在所有的worker节点上都有该文件。
(2)textFile()方法的输入参数,可以是文件名,也可以是目录,也可以是压缩文件等。比如,textFile(“/my/directory”), textFile(“/my/directory/.txt”), and textFile(“/my/directory/.gz”).
(3)textFile()方法也可以接受第2个输入参数(可选),用来指定分区的数目。默认情况下,Spark会为HDFS的每个block创建一个分区(HDFS中每个block默认是128MB)。可以提供一个比block数量更大的值作为分区数目,但是,不能提供一个小于block数量的值作为分区数目
操作
转换操作
filter(func):筛选出满足函数func的元素,并返回一个新的数据集
eg:
map(func):将每个元素传递到函数func中,并将结果返回为一个新的数据集
eg:每一次迭代返回一个迭代器
flatMap(func):与map()相似,但每个输入元素都可以映射到0或多个输出结果
eg : 最后只返回一个迭代器,相对于对map的结构再进行扁平化
groupByKey():应用于(K,V)键值对的数据集时,返回一个新的(K, Iterable)形式的数据集
eg: 将相同的key放在一起,v构成一个list
reduceByKey(func):应用于(K,V)键值对的数据集时,返回一个新的(K, V)形式的数据集,其中的每个值是将每个key传递到函数func中进行聚合
eg: 相同key进行计算,函数参数必须
行动操作
- count() 返回数据集中的元素个数
- collect() 以数组的形式返回数据集中的所有元素
- first() 返回数据集中的第一个元素
- take(n) 以数组的形式返回数据集中的前n个元素
- reduce(func) 通过函数func(输入两个参数并返回一个值)聚合数据集中的元素
- foreach(func) 将数据集中的每个元素传递到函数func中运行
持久化
- persist
persist()方法对一个RDD标记为持久化,之所以说“标记为持久化”,是因为出现persist()语句的地方,并不会马上计算生成RDD并把它持久化,而是要等到遇到第一个行动操作触发真正计算以后,才会把计算结果进行持久化,持久化后的RDD将会被保留在计算节点的内存中被后面的行动操作重复使用。
一般而言,使用cache()方法时,会调用persist(MEMORY_ONLY)
-unpersist
unpersist()方法手动地把持久化的RDD从缓存中移除
分区
RDD分区的一个分区原则是使得分区的个数尽量等于集群中的CPU核心(core)数目
spark.default.parallelism这个参数的值,来配置默认的分区数目,一般而言:
*本地模式:默认为本地机器的CPU数目,若设置了local[N],则默认为N;
*Apache Mesos:默认的分区数为8;
*Standalone或YARN:在“集群中所有CPU核心数目总和”和“2”二者中取较大值作为默认值;
键值对操作
reduceByKey(func)
groupByKey()
keys()
values()
sortByKey()
mapValues(func)
join
共享变量
需要在多个任务之间共享变量,或者在任务(Task)和任务控制节点(Driver Program)之间共享变量
广播变量
广播变量(broadcast variables)允许程序开发人员在每个机器上缓存一个只读的变量,而不是为机器上的每个任务都生成一个副本。
通过调用SparkContext.broadcast(v)来从一个普通变量v中创建一个广播变量。这个广播变量就是对普通变量v的一个包装器,通过调用value方法就可以获得这个广播变量的值
累加器
累加器是仅仅被相关操作累加的变量,通常可以被用来实现计数器(counter)和求和(sum)
SparkContext.accumulator()来创建。运行在集群中的任务,就可以使用add方法来把数值累加到累加器上,但是,这些任务只能做累加操作,不能读取累加器的值,只有任务控制节点(Driver Program)可以使用value方法来读取累加器的值
林子雨-Spark入门教程(Python版)-学习笔记(二)相关推荐
- 林子雨-Spark入门教程(Python版)-学习笔记(一)
第1章 Spark的设计与运行原理 简介 hadoop中计算框架MapReduce的缺点: 表能能力有限,计算都必须要转化成Map和Reduce两个操作,难以表示复杂场景 IO开销大,中间结果写入到磁 ...
- 【台大郭彦甫】Matlab入门教程超详细学习笔记二:基本操作与矩阵运算(附PPT链接)
Matlab入门教程超详细学习笔记二:基本操作与矩阵运算 前言 一.基本操作 1.把matlab当作计算器使用 2.变量 3.控制格式输出 二.矩阵运算 1.矩阵 2.矩阵索引 3.使用:创建向量 4 ...
- Spark入门(Python版)
Hadoop是对大数据集进行分布式计算的标准工具,这也是为什么当你穿过机场时能看到"大数据(Big Data)"广告的原因.它已经成为大数据的操作系统,提供了包括工具和技巧在内的丰 ...
- pythonsparkpickle_Learning Spark (Python版) 学习笔记(一)----RDD 基本概念与命令
<Learning Spark>这本书算是Spark入门的必读书了,中文版是<Spark快速大数据分析>,不过豆瓣书评很有意思的是,英文原版评分7.4,评论都说入门而已深入不足 ...
- 一个非常棒的Unity入门教程(附上学习笔记)
非常适合入门的unity教程,知识点全面,声音清晰,基本没有废话,时间控制得当,UP主Michael还在更很多其他的unity相关教程 视频教程地址:https://www.bilibili.com/ ...
- 1算法分析——数据结构与算法Python版学习笔记
什么是算法分析? 计算资源指标:一种是算法解决问题过程中需要的储存空间或内存,另一种是算法的执行时间 运行时间检测 time模块,获取计算机系统当前时间 例如: 方法一:累计求和程序的运行时间检测 i ...
- 【台大郭彦甫】Matlab入门教程超详细学习笔记七:数值微积分(附PPT链接)
数值微积分 前言 一.多项式微积分 1. 多项式计算 2. 多项式微分 3. 多项式积分 二.数值微积分 1. 数值微分法 2. 高阶微分法 3. 数值积分法 三.回顾Function Handles ...
- 【台大郭彦甫】Matlab入门教程超详细学习笔记五:初阶绘图(附PPT链接)
初阶绘图 前言 一.基础绘图 1.plot() 绘制二维线图 2.legend()添加图例 3.title()和*label()添加标题与坐标轴 4.text()和annotation()增加注解 二 ...
- 【台大郭彦甫】Matlab入门教程超详细学习笔记六:高阶绘图(附PPT链接)
高阶绘图 前言 一.进阶二维绘图 1. 对数图 2.一图双y轴 3. 直方图 4. 条形图 5. 饼状图 6. 极坐标图 7. 阶梯图与取样图 8. 箱线图以及误差线图 9. 填充图 二.配色 1.R ...
最新文章
- 请把我不会,换成我可以学
- [Tyvj 1729] 文艺平衡树
- android 代码设置textview draw,Android 自定义气泡TextView
- MTK驱动(53)---平台DTS文件匹配过程
- 多物理场面向对象模拟环境MOOSE学习手册
- Affymetrix基因芯片小总结
- 如何使用Scylla进行OSINT信息收集
- 【硬缸·EP2.0】MOSFET的特性与选择
- 彩虹QQ查看对方ip原理
- 规模再创新高!新能源汽车蓝海谁主沉浮
- Dynamics AX2012 General ledger
- nyoj-234-吃土豆(动态规划)
- 【大咖有约】子衿技术团队徐戟:DBA职场进阶之路
- 超搜索引擎BBMAO
- Web 字体应用指南最佳实践修炼之道(上)
- allegro 进行outline倒角
- Odoo与浪潮合资研发PS Cloud之如何在Odoo中进行搜索引擎优化(5)
- iOS真机调试TestFlight安装及提交App Store审核教程
- USB2.0端口设备静电防护方案设计压敏电阻或TVS管
- 个性彰显时代的轻博客8090S