zoukankan      html  css  js  c++  java
  • 寒假学习进度

    今天完成学习了一个案例的实践和一些spark算子的学习

    (1)join

    def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator15")
    val sc = new SparkContext(sparkConf)

    val rdd1 = sc.makeRDD(
    List(("a",1),("b",2),("c",3))
    )
    val rdd2 = sc.makeRDD(
    List(("a",4),("b",5),("c",6))
    )

    //两数据源相同key组合在一起形成元组
    //如果两数据源中key没有匹配上就不会出现
    val joinrdd: RDD[(String, (Int, Int))] = rdd1.join(rdd2)

    joinrdd.collect().foreach(println)
    sc.stop()
    }

    (2)leftOuterJoin   rightOuterJoin

    def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator15")
    val sc = new SparkContext(sparkConf)

    val rdd1 = sc.makeRDD(
    List(("a",1),("b",2),("c",3))
    )
    val rdd2 = sc.makeRDD(
    List(("a",4),("b",5),("c",6))
    )

    //leftOuterJoin(左链接),rightOuterJoin(右链接)
    val joinrdd: RDD[(String, (Int, Option[Int]))] = rdd1.leftOuterJoin(rdd2)
    val joinrdd1: RDD[(String, (Option[Int], Int))] = rdd1.rightOuterJoin(rdd2)
    joinrdd1.collect().foreach(println)
    sc.stop()
    }

    (3)cogroup

    def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator15")
    val sc = new SparkContext(sparkConf)

    val rdd1 = sc.makeRDD(
    List(("a",1),("b",2),("c",3))
    )
    val rdd2 = sc.makeRDD(
    List(("a",4),("b",5),("c",6),("c",7))
    )

    //cogroup将一个数据源中的相同key放在一个组中,然后与另一个数据源链接
    val cgrdd: RDD[(String, (Iterable[Int], Iterable[Int]))] = rdd1.cogroup(rdd2)

    cgrdd.collect().foreach(println)
    sc.stop()
    }

    (4)案例

    统计出每一个省份每个广告被点击数量排行的 Top3
    def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator15")
    val sc = new SparkContext(sparkConf)

    //尚硅谷的案例实操

    //读取数据
    val data: RDD[String] = sc.textFile("data/agent.log")

    //将数据的结构转换,取得省份和广告
    val maprdd: RDD[((String, String), Int)] = data.map(
    line => {
    val datas = line.split(" ")
    ((datas(1), datas(4)), 1)
    }
    )

    //转换后的数据进行分组聚合
    val reducerdd: RDD[((String, String), Int)] = maprdd.reduceByKey(_ + _)

    //聚合后的结果进行结构转换
    val maprdd2: RDD[(String, (String, Int))] = reducerdd.map {
    case ((shenfen, guangao), sum) => {
    (shenfen, (guangao, sum))
    }
    }
    //转换后的数根据省份进行分组
    val grouprdd: RDD[(String, Iterable[(String, Int)])] = maprdd2.groupByKey()

    //分组后的数据进行组内排序,并且取前3
    val resultrdd: RDD[(String, List[(String, Int)])] = grouprdd.mapValues(
    iter => {
    iter.toList.sortBy(_._2)(Ordering.Int.reverse).take(3)
    }
    )

    resultrdd.collect().foreach(println)
    resultrdd.saveAsTextFile("output")

    sc.stop()
    }
  • 相关阅读:
    Java 常见异常种类
    Spring3.2+mybatis3.2+Struts2.3整合配置文件大全
    Java中的基本类型和引用类型变量的区别
    【git】Git 提示fatal: remote origin already exists 错误解决办法
    【Java集合】Java中集合(List,Set,Map)
    POJ3322-经典的游戏搜索问题
    程序人生[流程图]
    不使用中间变量交换两个数
    做人要低调,别把自己太当回事
    【转】嵌套子控件设计时支持
  • 原文地址:https://www.cnblogs.com/chenghaixiang/p/15776992.html
Copyright © 2011-2022 走看看