怎么进行spark的基本算子使用和源码解析

这篇文章将为大家详细讲解有关怎么进行spark的基本算子使用和源码解析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

一.coalesce

1.coalesce源码

怎么进行spark的基本算子使用和源码解析
怎么进行spark的基本算子使用和源码解析

2.coalesce解释

是窄依赖
由多变少
shuffer默认是false,要注意

3.coalesce应用场景

解决小文件,例如你如果开始有200个文件对应20分区,你极端情况下你过滤变长一个文件,你不能还用200个分区去装吧
用coalesce解决,主要就是把前面的压缩一下,但是过滤完后你要用coalesce必须实现做预估

怎么进行spark的基本算子使用和源码解析

4.上述的极端情况

你如果是xxx.oalesce(1),从源头就是1,不会像mr可以设置reduce的数量

5.注意事项用coalesce 中RDD的不可变性

下图说述的分区的大小a.partitions.size  你之前没有用变量接收coalesce 的值,是不会变得值

怎么进行spark的基本算子使用和源码解析

6.你传一个参数要小于默认分区才会生效

怎么进行spark的基本算子使用和源码解析

7.coalesce设置的参数大于默认的分区数不会生效,前提是一个参数

怎么进行spark的基本算子使用和源码解析

8.coalesce设置的参数大于默认的分区数生效

怎么进行spark的基本算子使用和源码解析

9.此问题对应的源码:

note With shuffle = true, you can actually coalesce to a larger number
一般数不需要第二个参数的

二.repartition

1.源码:

怎么进行spark的基本算子使用和源码解析

2.底层调用的是coalesce,但是传两个参数,允许shuffer

3.由少变多

4.repartition与coalesce区别:

就是repartition底层调用coalesce两个参数

三.map方法使用

1.源码

怎么进行spark的基本算子使用和源码解析

2.解释

每个函数操作的对象是每个元素

3.注意事项

千万不要用于操作数据库,否则一个元素要拿个connect,太耗费资源

四.mapPartitions

1.源码

怎么进行spark的基本算子使用和源码解析

2.解释

每个函数作用在每个分区上,多用于操纵数据库,一个分区一个connect

五.foreach 与 foreachPartition

1.源码

怎么进行spark的基本算子使用和源码解析

2.解释

一个是打印每个元素,一个是按分区打印,都是action

3.注意事项

foreachPartition多用于操作数据库,存储结果

五.collect

1.源码

怎么进行spark的基本算子使用和源码解析

2.解释与注意事项

源码 返回数组,数组里包含所有元数
数据小用可以,因为数据都会被放到内存里,输出到driver端的
超过内存会报oom

3.driver端的OOM调整一些方法

把driver 调大一些,有局限性
RDD中元素太大,抽取回driver会报OOP
不可以用collect
可以用take

4.collect注意数据量

collect
collectByKey
collectByValue
collectAsMap  结果集出来后变成map
这些要看数据量要悠着点用,都要数据量少
广播变量必须数据量少才可以用

六.take

1.源码

怎么进行spark的基本算子使用和源码解析

2.解释

面试常问take是全部扫描还是部分扫描:
部分扫描从源码有体现

3.collect 与 take 注意

不确定数据有多大你可以先count一下
如果少的情况下捏可以用collect,如果太多可以用take
这些知识测试用
要全部结果你可以保存到文件系统上去saveas...

七.groupByKey 与 reduceByKey

1.源码reduceByKey

怎么进行spark的基本算子使用和源码解析

2.源码groupByKey

怎么进行spark的基本算子使用和源码解析

3.reduceByKey测试代码

怎么进行spark的基本算子使用和源码解析

4.测试WEBUI截图

怎么进行spark的基本算子使用和源码解析

5.groupByKey测试代码

怎么进行spark的基本算子使用和源码解析

6.测试WEBUI截图

怎么进行spark的基本算子使用和源码解析

7.groupByKey与reduceByKey比较

groupByKey  比reduceByKey  数据大小明显变大,不如reduceByKey  性能好

怎么进行spark的基本算子使用和源码解析

8.groupByKey与reduceByKey shuffer截图比较

groupByKey   所有元素都shuffer

怎么进行spark的基本算子使用和源码解析

reduceByKey  在map阶段有一个聚合

怎么进行spark的基本算子使用和源码解析

关于怎么进行spark的基本算子使用和源码解析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

原创文章,作者:1402239773,如若转载,请注明出处:https://blog.ytso.com/222804.html

(0)
上一篇 2022年1月6日
下一篇 2022年1月6日

相关推荐

发表回复

登录后才能评论