<h3>spark算子介绍</h3>
<p>Spark的算子的分类</p>
<p><strong>1、从大方向来说,Spark 算子大致可以分为以下两类:</strong></p>
<p>1)Transformation 变换/转换算子:这种变换并不触发提交作业,完成作业中间过程处理。</p>
<p>Transformation 操作是延迟计算的,也就是说从一个RDD 转换生成另一个 RDD 的转换操作不是马上执行,需要等到有 Action 操作的时候才会真正触发运算。</p>
<p>2)Action 行动算子:这类算子会触发 SparkContext 提交 Job 作业。</p>
<p>Action 算子会触发 Spark 提交作业(Job),并将数据输出 Spark系统。</p>
<p><strong>2、从小方向来说,Spark 算子大致可以分为以下三类:</strong></p>
<p>1)Value数据类型的Transformation算子,这种变换并不触发提交作业,针对处理的数据项是Value型的数据。<br> 2)Key-Value数据类型的Transfromation算子,这种变换并不触发提交作业,针对处理的数据项是Key-Value型的数据对。<br> 3)Action算子,这类算子会触发SparkContext提交Job作业。</p>
<p><strong>1)Value数据类型的Transformation算子 </strong></p>
<p> 一、输入分区与输出分区一对一型</p>
<p> 1、map算子</p>
<p> 2、flatMap算子</p>
<p> 3、mapPartitions算子</p>
<p> 4、glom算子</p>
<p> 二、输入分区与输出分区多对一型 </p>
<p> 5、union算子</p>
<p> 6、cartesian算子</p>
<p> 三、输入分区与输出分区多对多型</p>
<p> 7、grouBy算子</p>
<p> 四、输出分区为输入分区子集型</p>
<p> 8、filter算子</p>
<p> 9、distinct算子</p>
<p> 10、subtract算子</p>
<p> 11、sample算子</p>
<p> 12、takeSample算子</p>
<p> 五、Cache型</p>
<p> 13、cache算子 </p>
<p> 14、persist算子</p>
<p> </p>
<p><strong>2)Key-Value数据类型的Transfromation算子</strong></p>
<p> 一、输入分区与输出分区一对一</p>
<p> 15、mapValues算子</p>
<p> 二、对单个RDD或两个RDD聚集</p>
<p> 单个RDD聚集</p>
<p> 16、combineByKey算子</p>
<p> 17、reduceByKey算子</p>
<p> 18、partitionBy算子</p>
<p> 两个RDD聚集</p>
<p> 19、Cogroup算子</p>
<p> 三、连接</p>
<p> 20、join算子</p>
<p> 21、leftOutJoin和 rightOutJoin算子</p>
<p><strong> 3)Action算子</strong></p>
<p> 一、无输出</p>
<p> 22、foreach算子</p>
<p> 二、HDFS</p>
<p> 23、saveAsTextFile算子</p>
<p> 24、saveAsObjectFile算子</p>
<p> 三、Scala集合和数据类型</p>
<p> 25、collect算子</p>
<p> 26、collectAsMap算子</p>
<p> 27、reduceByKeyLocally算子</p>
<p> 28、lookup算子</p>
<p> 29、count算子</p>
<p> 30、top算子</p>
<p> 31、reduce算子</p>
<p> 32、fold算子</p>
<p> 33、aggregate算子</p>
<h3><strong>常用Transformation</strong></h3>
<p><strong>1、parallelize</strong></p>
<p>#通过并行化scala集合创建RDD<br> val rdd1 = sc.parallelize(Array(1,2,3,4,5,6))<br> #查看该rdd的分区数量<br> rdd1.partitions.length</p>
<p><img alt="在这里插入图片描述" class="blockcode" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-0279226d41a07a69b8151666bc7cb89c.png"></p>
<p><strong>2、sortBy</strong></p>
<p>升序排序<br> val rdd2 = sc.parallelize(List(5,6,4,7,3,8,2,9,1,10)).map(_*2).sortBy(x=>x,true)</p>
<p><img alt="在这里插入图片描述" class="blockcode" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-4f1f68e403d6f941be7092bc09f50092.png"><br> val rdd2 = sc.parallelize(List(5,6,4,7,3,8,2,9,1,10)).map(_*2).sortBy(x=>x+"",true)<br><img alt="在这里插入图片描述" class="blockcode" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-3b01e3dbf7fa8da19554c0cbc0ac97a9.png"></p>
<p>val rdd2 = sc.parallelize(List(5,6,4,7,3,8,2,9,1,10)).map(_*2).sortBy(x=>x.toString,true) </p>
<p><img alt="在这里插入图片描述" class="blockcode" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-86853f250872b62b7854c9134abe0fe1.png"></p>
<p><strong>3、filter </strong></p>
<p>过滤<br> val rdd3 = rdd2.filter(_>10)</p>
<p><img alt="在这里插入图片描述" class="blockcode" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-96961fa7dd8b3c6061abe6c4b1b7baef.png"> //字典序排序</p>
<p><strong>4、flatMap</strong><br> //切割压平</p>
<p>val rdd4 = sc.parallelize(Array("a b c","d e f","h i j"))<br> rdd4.flatMap(_.split(" ")).collect </p>
<p><img alt="在这里插入图片描述" class="blockcode" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-424017dc2108c13267ba965ab57ceb17.png"></p>
<p>val rdd5 = sc.parallelize(List(List(“a b c”,“a b b”),List(“e f g”, |
|