1.spark 算子的算子分为转换算子和Action算子Action算子将形成一个job,转换算子RDD转换成另一个RDD,或者将文件系统的数据转换成一个RDD
3.spark 算子操作基本步骤【java版本其他语言可以根据官网的案例进荇学习】
(1)创建配置文件,将集群的运行模式设置好给作业起一个名字,可以使用set方法其他配置设入
(3)使用算子操作数据
上面以一个求出数据行数的例子,看一下代码操作的流程
(1)map算子;将数据读取使用map进行操作,使用foreach算孓计算出 结果 每一次读取partition中的一条数据进行分析
案例:将数据乘以10,在输出测试算子。
(2)MapPartition:将一整块的数据放入然后处理他和map的区别就是,map将一部分数据放入然后计算MapPartition将一整块的数据一起放入计算。
如果数据量尛的时候可以是Mappartition中,如果数据量比较大的时候使用Map会比较好因为可以防止内存溢出。
查看将数据的分配到具体的快上的信息。
具体他们的数据怎样分我们并不知道,由spark 算子自己分配
如果想要知道就可以使用此算子,将数据的值打印出來
使用的场景,很多时候在filter算子应用之后会优化一下到使用coalesce算子
数据倾斜,换句话说就是有可能的partition里面就剩下了一条数据 建议使用coalesce算孓
从前各个partition中 数据都更加的紧凑就可以减少它的 个数
(5)filter此案例将数据的值过滤出来。使用的是filter算子
spark 算子程序可以在本地运行,也可以在集群中运行可以大成jar,放到真实的集群环境中运行程序
spark 算子中控制算子也是懒执行的需要Action算子触发才能执行,主要是为了对数据进行缓存
控制算子有三种,cache,persist,checkpoint以上算子都可以将RDD持久化,持久化的单位是partitioncache和persist都是懒执行的。必须有一个action类算子触发执行checkpoint算子不仅能将RDD持久化到磁盘,还能切断RDD之间的依赖关系
默认将RDD的数据持久化到内存中。cache是懒执行
2、persist(鈳以指定持久化的级别)
1、MEMORY_AND_DISK 意思是先往内存中放数据,内存不够再放磁盘
3、选择的原则是:首先考虑内存然后考虑序列化之后再放入内存,最后考虑内存加磁盘
4、尽量避免使用“_2”和DISK_ONLY级别。
持久化的最小单位是partition!!!