Spark算子代码汇总

本文汇总了Spark中的Transformations、Action和控制算子,包括map、flatMap、filter、join、collect、count、reduce等操作,介绍了它们的功能和使用场景,同时也探讨了持久化策略如cache和checkpoint的应用。
摘要由CSDN通过智能技术生成

Spark算子代码汇总

算子分类

​ Transformations转换算子延迟执行 需要Action算子触发才执行

​ Action行动算子,触发执行

​ 控制算子 cache persist checkpoint

Transformations

​ 延迟执行 需要Action算子触发才执行

map- 1:1 取数据数据是一行
flatMap-1:n 数据是多行拆分过的
filter-过滤
sortByKey-排序
sortBy-排序 按照v(Int)进行排序,默认正序排列
sample-随机抽样
    //map 1:1 数据是一行
//    lines.map(one=>{
//      one+"#"
//    }).foreach(println)

    //flatMap 1:n 数据是多行拆分过的
//    lines.flatMap(one=>{one.split(" ")}).foreach(println)

    //过滤-filter
//    val rdd1: RDD[String] = lines.flatMap(one=>{one.split(" ")})
//    rdd1.filter(one=>{
//      "book".equals(one)
//    }).foreach(println)

    //排序-ortByKey
//    val words: RDD[String] = lines.flatMap(one=>{one.split(" ")})
//    val pairWords: RDD[(String, Int)] = words.map(one=>{(one,1)})
//    val reduceResult: RDD[(String, Int)] = pairWords.reduceByKey((v1:Int,v2:Int)=>{v1+v2})
//    //按照k(String)进行v的逆序
//    //从map中取出数据并翻转,此时是数据在前单词在后
//    val teransRDD: RDD[(Int, String)] = reduceResult.map(tp=>{tp.swap})
//    val result: RDD[(Int, String)] = teransRDD.sortByKey(false)
//    //再次转换kv位置
//    result.map(_.swap).foreach(println)

    //排序-sortBy
    //按照v(Int)进行排序,不写false,默认正序排列
//    reduceResult.sortBy(tp=>{tp._2},false)foreach(println)

    //随机抽样-sample
    //(抽到所需数据后是继续,抽样占总数的比率,抽样的随机数据会固定)
//    val result: RDD[String] = lines.sample(true,0.1,100L)
//    result.foreach(println)
join

不相同的元素不打印

    val nameRDD: RDD[(String, Int)] = sc.parallelize(List[(String,Int)](("zhangsan",18),("lisi",20),("wangwu",22),("maliu",24)))
    val soreRDD: RDD[(String, Int)] = sc.parallelize(List[(String,Int)](("zhangsan",100),("lisi",200),("wangwu",300),("tianqi",400)))

    //jion
    val result: RDD[(String, (Int, Int))] = nameRDD.join(soreRDD)
    result.foreach(println)
leftOuterJoin-偏左合并

​ leftOuterJoin 以左为主,左边的全都打印,没有的显示None

​ 左边少,右边多的元素,不打印

​ 遍历元素可以取元组下标

val result: RDD[(String, (Int, Option[Int]))] = nameRDD.leftOuterJoin(soreRDD)
result.foreach(one=>{
  val name = one._1
  val age = one._2._1
  val sore = one._2._2.getOrElse("666")
  println(s"name = $name, age=$age, sore = $sore")
})
rightOuterJoin-偏右合并

​ 用法等同于leftOuterJoin

fullOuterJoin-全合并,None补空

​ 左右两边都打印,没有的元素用None表示

val result: RDD[(String, (Option[Int], Option[Int]))] = nam
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值