zoukankan      html  css  js  c++  java
  • 【spark】示例:求极值

    我们有这样的数据

    1.建立SparkContext读取数据

      (1)建立sc

      (2)通过sc.textFile()读取数据创建Rdd

    2.过滤数据

     通过filter(line => line.trim.length>0)过滤掉无效数据

    3.转换数据类型以及转换成键值对的形式

    我们要把String类型的数据换成Int类型的,并且要转化成为("key",Int)类型的键值对

    每条数据都有相同的Key,然后我们通过groupByKey()方法将所有的值收集到一个集合中。

    有同学会问?我们用求Top的思想去求不也行吗?

    当然是可以的,但是我们每次只能求一个值,不能同时求出最大值和最小值。

    4.调用groupByKey()方法把所有数据收集到同一个集合中

    5.遍历集合求最大值最小值

    我们追个比较每个数据,要是比最大值大就替换,比最小值小替换。

    遍历结束后,最大值最小值就得出来了。

    val max = Integer.MAX_VALUE

    val min = Integer.MIN_VALUE

    for(num <- x._2){

      if(num > max)

        max = num

      if(num < min)

        min = num

    }

    完整代码

    import org.apache.spark.{SparkConf, SparkContext}
    
    object MaxAndMin {
        //建立SparkContext
        val sparkConf = new SparkConf().setAppName("TopN")
        val sc = new SparkContext(sparkConf)
        //设置日志等级,只显示报错
        sc.setLogLevel("ERROR")
        //读取数据,分区
        val lines = sc.textFile("hdfs://localhost:9000/user/local/spark/data",2)
        var min = Integer.MAX_VALUE
        var max = Integer.MIN_VALUE
        var result = lines.filter(line => line.trim.length > 0 )//过滤数据
                          .map(x =>("key",x.toInt)) //修改数据类型并转化为键值对的形式
                          .groupByKey()//分组,因为每条数据都设置的相同的key,所以最终所有数据会分到一个集合中
                          .map( x => {  //求最大值,最小值
                              for(num <- x._2){
                                  if(num > max)
                                      max = num
                                  if(num < min)
                                      min = num
                              }
                              (max,min)//返回值
                          })
                          .collect
                          .foreach( x =>{ //显示数据,
                                          //注意之前匿名函数x=>(max,min),所以这里操作的是数据是(max,min)
                                println("max"+"	"+x._1) //显示最大值
                                println("min"+"	"+x._2) //显示最大值
        })
    }
    

      

  • 相关阅读:
    [SCOI2015]国旗计划
    [SCOI2015]小凸玩矩阵
    点分治复习笔记
    [HNOI2014]米特运输
    [HNOI2015]接水果
    [HEOI2016/TJOI2016]游戏
    为什么验证集的loss会小于训练集的loss?
    转载GPU并行计算
    深度学习图像标注工具汇总(转载)
    你理解了吗?
  • 原文地址:https://www.cnblogs.com/zzhangyuhang/p/9035319.html
Copyright © 2011-2022 走看看