spark-常用算子

论坛 期权论坛     
选择匿名的用户   2021-5-31 02:11   241   0
<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 &#61; 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 &#61; sc.parallelize(List(5,6,4,7,3,8,2,9,1,10)).map(_*2).sortBy(x&#61;&gt;x,true)</p>
<p><img alt="在这里插入图片描述" class="blockcode" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-4f1f68e403d6f941be7092bc09f50092.png"><br> val rdd2 &#61; sc.parallelize(List(5,6,4,7,3,8,2,9,1,10)).map(_*2).sortBy(x&#61;&gt;x&#43;&#34;&#34;,true)<br><img alt="在这里插入图片描述" class="blockcode" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-3b01e3dbf7fa8da19554c0cbc0ac97a9.png"></p>
<p>val rdd2 &#61; sc.parallelize(List(5,6,4,7,3,8,2,9,1,10)).map(_*2).sortBy(x&#61;&gt;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 &#61; rdd2.filter(_&gt;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 &#61; sc.parallelize(Array(&#34;a b c&#34;,&#34;d e f&#34;,&#34;h i j&#34;))<br> rdd4.flatMap(_.split(&#34; &#34;)).collect </p>
<p><img alt="在这里插入图片描述" class="blockcode" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-424017dc2108c13267ba965ab57ceb17.png"></p>
<p>val rdd5 &#61; sc.parallelize(List(List(“a b c”,“a b b”),List(“e f g”,
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP