Scala版算子(包括:join,leftjoin,rightjoin,fulljoin,distinct,saveAsTextFile,foreachPartition,mapPartit)【代码】

本文深入探讨Scala中常见的数据处理算子,包括join、leftjoin、rightjoin、fulljoin实现数据融合,distinct操作去除重复项,saveAsTextFile用于结果持久化,以及如何通过foreachPartition和mapPartitions进行并行处理优化。通过实例解析,帮助读者掌握Scala大数据处理的核心技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.bjsxt.spark

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import scala.actors.threadpool.Arrays

import scala.collection.mutable.ListBuffer

object SparkJoin {
  def main(args: Array[String]): Unit = {
   val  conf=new SparkConf().setAppName("test").setMaster("local");
   val  sc=new SparkContext(conf);
   val rdd6=sc.parallelize(Array("a","b","b","b","c","d","d","e","f","g","h"),2);
    /**
     * saveAsTextFile:将计算结果保存成文件
     */
   rdd6.saveAsTextFile("./result")
   /**
     * foreachPartition:只是简单的分区遍历,没有其他的操作
     */
   val rdd8=rdd6.foreachPartition(iter=>{
    while(iter.hasNext){
         println(iter.next())
    }
     
   })
   println("_____________________________________________________-")
   /**
    * mapPartitions插入分区操作
    */
   val rdd7= rdd6.mapPartitions(iter=>{   //遍历一个分区,当有插入一个数据库操作的时候,需要用mapPartitions操作
     val list=ListBuffer[String]();
     while(iter.hasNext){
       val one=iter.next();
       list.+=(one+"~")
     }
     list.iterator
     
   }, true)
   rdd7.foreach(println)
   println("遍历结束了+++++++++++++++++++++++++++++++++++++++++++++++++=")
   
   
   val rdd5=sc.parallelize(Array("a","b","b","b","c","d","d"),2);
   
   val result5=rdd5.distinct();
   result5.foreach(println)
   
   val rdd2=sc.parallelize(Array((1,2),(3,4),(5,6)));
   val rdd3= sc.parallelize(Array(("zhangsan","18"),("lisi","23"),("wangwu","20"),("maliu","50")))
   val rdd4= sc.parallelize(Array(("zhangsan","180"),("lisi","230"),("wangwu","200"),("tianqi","500")))
   
   
   
   
   
   /**
    * join操作
    */
   val result=rdd3.join(rdd4);
   result.foreach(println);
   /**
    * leftOuterJoin
    */
   val result2=rdd3.leftOuterJoin(rdd4);   
   result2.foreach(println);
   println("leftouterjoin的细化操作:")
   result2.foreach(tuple=>{
     val key=tuple._1
     val value1=tuple._2._1
     val options=tuple._2._2
    
     println("key=>"+key+",value1=>"+value1+",options=>"+options.getOrElse("fdjkljsfgshskjfdh"))
   })
   /**
    * rightOuterJoin
    */
   val result3=rdd3.rightOuterJoin(rdd4)
   result3.foreach(println);
   /**
    * 
    */
   val result4=rdd3.fullOuterJoin(rdd4)
   result4.foreach(println);
   /**
    * 查看rdd的分区
    */
   val rdd1=sc.parallelize(Array(1,2,3,4,5),3);//parallelize方法相当于Java中的parallelizepares方法
   println("rdd partitions lengt="+rdd1.partitions.length)
   rdd1.count();
  
    
  }
  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值