zoukankan      html  css  js  c++  java
  • Spark学习进度7-综合案例

    综合案例

    文件排序

     解法:

    1.读取数据

    2.数据清洗,变换数据格式

    3.从新分区成一个分区

    4.按照key排序,返还带有位次的元组

    5.输出

    @Test
      def filesort(): Unit ={
        val source=sc.textFile("dataset/filesort.txt",3)
        var index=0
        /*
        partitionBy:把所有的分区相关的数据组成一个新的分区
        HashPartitioner(1):分成一个分区,使得在一个分区内总体有序
         */
        val result= source.filter(_.trim().length>0).map(n => (n.trim.toInt,""))
          .partitionBy(new HashPartitioner(1))
          .sortByKey().map( t=> {
          index+=1
          (index,t._1)
        })
        result.foreach(println(_))
      }

    二次排序

    题目大意:先按照第一个比,相同则按照第二个比

    题意思路:

    1.读取数据

    2.转换格式如下

     

     可用图片展示:

     

    class SecondarySortKey(val first:Int,val second:Int) extends Ordered
      [SecondarySortKey] with Serializable{
    
      override def compare(that: SecondarySortKey): Int = {
        if(this.first-that.first!=0){
          this.first-that.first
        }else {
          this.second-that.second
        }
      }
    }
    //二次排序
      @Test
      def sortsecond(): Unit ={
    
        val source=sc.textFile("dataset/secondsort.txt",3)
        val secondrdd = source.map(item => (new SecondarySortKey(item.split(" ")(0).toInt, item.split(" ")(1).toInt), item))
            .partitionBy(new HashPartitioner(1))
        secondrdd.sortByKey(false)
          .map(item => item._2)
          .foreach(println(_))
    
      }

    连接操作

    案例介绍:

    有两个表:movie表,和score表

    score:包含的信息为:用户ID,电影ID,电影评分

    movie:电影ID,电影名字

     我们想要得到,评分超过4分的(电影ID,电影名字,电影评分)

    思路如下:

    首先先弄score表:

    1.获取想要的信息

    2.获取对应电影ID的平均值

    3.更换格式:keyBy,如下

    对于movie表进行连接,连接前需要变化下格式

     然后可通过相同的key进行连接join,后的结果如下:

     进行评分的过滤,然后取出需要的数据

    @Test
      /*
      score:包含的信息为:用户ID,电影ID,电影评分
      movie:电影ID,电影名字
       */
      def joinTest(): Unit ={
        val scoreRDD=sc.textFile("dataset/score.txt")
          .map(line => {
            val filed=line.split(",")
            (filed(1).toInt,filed(2).toDouble)
          })
          .groupByKey()
          .map(data =>{
            val avg=data._2.sum/data._2.size
            (data._1,avg)
          })
          .keyBy(it =>it._1)
    
        val movie=sc.textFile("dataset/movie.txt")
          .map(line => {
            val filed=line.split(",")
            (filed(0).toInt,filed(1))
          })
          .keyBy(it =>it._1)
    
        scoreRDD.join(movie)
          .filter(item => item._2._1._2>4.0)
          .map(it => (it._1,it._2._2._2,it._2._1._2))
          .foreach(println(_))
      }

    输出:

    score表:

     movie表:

     最终输出:

     

  • 相关阅读:
    C++ virtual虚函数
    drawable以及Bitmap的基本操作
    Runnable,Thread实现多线程以及Runnable的同步资源共享
    Upgrade Win10
    [Fiddler]Unable to Generate Certificate
    win8升级win10后的windows.old怎么删除
    一个WebForm中连接SQL Server的例子
    markdownpad2使用说明
    SliverLight(how to show data point on the column series)
    SQLServer 在Visual Studio的2种连接方法
  • 原文地址:https://www.cnblogs.com/xiaofengzai/p/14260216.html
Copyright © 2011-2022 走看看