1.SparkContext对象
2.RDD创建
2.1 并行化集合创建
本地集合:list,dict类似的东西
实例代码如下图所示:
2.2 读取外部数据源
3.算子
3.1 算子概念
算子:分布式集合对象上的API叫算子
方法/函数:本地对象的API叫方法函数
3.2 算子分类
Transformation:转换算子
Action:行动算子
4.常用Transformation算子
4.1 map算子
4.2 flatMap算子
4.3 reduceByKey算子
4.4 mapValues算子
与map区别:
4.5 groupBy算子
实际代码:
4.6 fileter算子
实例代码:
4.7 distinct算子
实例代码:
4.8 union算子
4.9 join算子
对于join算子来说,关联条件按照二元元组的key来进行
实例代码:
4.10 intersection算子
4.11 glom算子
实例代码:
glom嵌套后,如果要解嵌套,使用flatmap算子,但不想要map的话,传一个lambda就可以实现,示例代码如下:
4.12 groupByKey算子
与groupBy(可传分组逻辑函数)相比,groupByKey是按照K来分组,针对kv形数据
,返回数据时,groupBy返回的迭代对象是每一个对象,而groupByKey返回的迭代对象是每一个对象的V值。
4.13 sortBy算子
实例代码:
==注意:==如果要全局有序,排序分区数需要设置为1,如果设置为3,只能保证3个分区的局部有序
4.14 sortByKey算子
实例代码:
5.常用Action算子
5.1 countByKey算子
==注:==action算子返回的不是rdd,所以在result中不用使用.collect就能输出结果
5.2 collect算子
5.3 reduce算子
5.4 fold算子
5.5 first算子
5.6 take算子
5.7 top算子
5.8 count算子
5.9 takeSample算子
==注:==是否重复和数据值无关,与数据位置有关
5.10 takeOrder算子
==注:==参数2只是提供根据什么返回,不影响数据本身
5.10 foreach算子
5.11 saveAsTextFile算子
6.分区操作算子
6.1 mapPartitions算子
实例代码如下:
6.2 foeachPartitions算子
6.3 partitonBy算子
实例代码如下:
6.4 repartiton算子
coalesce算子也可以重分区,但是如果增加分区,那么必须明确给出shuffle=True
7.groupByKey与reduceByKey的区别
8 RDD的持久化
8.1 RDD的数据是过程数据
8.2 RDD缓存
8.3 RDD CheckPoint
9.广播
问题点: list的传输导致内存的浪费和多余的网络开销
注: 如果将list转为RDD,RDD分区后必然会使用JOIN(shuffle),shuffle会大大降低效率。
10.累加
没有累加器的代码显示
输出结果:12345,12345,0,没有将分区结果相加
有累加器的代码:
==累加器的注意事项:==如果后续还有调用,累加器的值不会返回初始值,解决方案就是将中间RDD缓存下
11 广播和累加器的案例
- 实现代码: