这篇文章将为大家详细讲解有关怎么进行spark的基本算子使用和源码解析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
一.coalesce
1.coalesce源码
2.coalesce解释
是窄依赖由多变少shuffer默认是false,要注意
3.coalesce应用场景
解决小文件,例如你如果开始有200个文件对应20分区,你极端情况下你过滤变长一个文件,你不能还用200个分区去装吧用coalesce解决,主要就是把前面的压缩一下,但是过滤完后你要用coalesce必须实现做预估
4.上述的极端情况
你如果是xxx.oalesce(1),从源头就是1,不会像mr可以设置reduce的数量
5.注意事项用coalesce 中RDD的不可变性
下图说述的分区的大小a.partitions.size 你之前没有用变量接收coalesce 的值,是不会变得值
6.你传一个参数要小于默认分区才会生效
7.coalesce设置的参数大于默认的分区数不会生效,前提是一个参数
8.coalesce设置的参数大于默认的分区数生效
9.此问题对应的源码:
note With shuffle = true, you can actually coalesce to a larger number一般数不需要第二个参数的
二.repartition
1.源码:
2.底层调用的是coalesce,但是传两个参数,允许shuffer
3.由少变多
4.repartition与coalesce区别:
就是repartition底层调用coalesce两个参数
三.map方法使用
1.源码
2.解释
每个函数操作的对象是每个元素
3.注意事项
千万不要用于操作数据库,否则一个元素要拿个connect,太耗费资源
四.mapPartitions
1.源码
2.解释
每个函数作用在每个分区上,多用于操纵数据库,一个分区一个connect
五.foreach 与 foreachPartition
1.源码
2.解释
一个是打印每个元素,一个是按分区打印,都是action
3.注意事项
foreachPartition多用于操作数据库,存储结果
五.collect
1.源码
2.解释与注意事项
源码 返回数组,数组里包含所有元数数据小用可以,因为数据都会被放到内存里,输出到driver端的超过内存会报oom
3.driver端的OOM调整一些方法
把driver 调大一些,有局限性RDD中元素太大,抽取回driver会报OOP不可以用collect可以用take
4.collect注意数据量
collectcollectByKeycollectByValuecollectAsMap 结果集出来后变成map这些要看数据量要悠着点用,都要数据量少广播变量必须数据量少才可以用
六.take
1.源码
2.解释
面试常问take是全部扫描还是部分扫描:部分扫描从源码有体现
3.collect 与 take 注意
不确定数据有多大你可以先count一下如果少的情况下捏可以用collect,如果太多可以用take这些知识测试用要全部结果你可以保存到文件系统上去saveas...
七.groupByKey 与 reduceByKey
1.源码reduceByKey
2.源码groupByKey
3.reduceByKey测试代码
4.测试WEBUI截图
5.groupByKey测试代码
6.测试WEBUI截图
7.groupByKey与reduceByKey比较
groupByKey 比reduceByKey 数据大小明显变大,不如reduceByKey 性能好
8.groupByKey与reduceByKey shuffer截图比较
groupByKey 所有元素都shuffer
reduceByKey 在map阶段有一个聚合
关于怎么进行spark的基本算子使用和源码解析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。