zoukankan      html  css  js  c++  java
  • 寒假学习第七天

    编写独立应用程序实现数据去重
    对于两个输入文件 A 和 B,编写 Spark 独立应用程序,对两个文件进行合并,并剔除其
    中重复的内容,得到一个新文件 C。下面是输入文件和输出文件的一个样例,供参考。
    输入文件 A 的样例如下:
    20170101 x
    20170102 y
    20170103 x
    20170104 y
    20170105 z
    20170106 z
    输入文件 B 的样例如下:
    20170101 y
    20170102 y
    20170103 x
    20170104 z
    20170105 y
    根据输入的文件 A 和 B 合并得到的输出文件 C 的样例如下:
    20170101 x
    20170101 y
    20170102 y
    20170103 x
    20170104 y
    20170104 z
    20170105 y
    20170105 z
    20170106 z

    package my.scala

    import org.apache.spark.{SparkConf, SparkContext}
    object case2 {
      def main(args: Array[String]): Unit = {
        val conf = new SparkConf().setMaster("local").setAppName("reduce")
        val sc = new SparkContext(conf)
        sc.setLogLevel("ERROR")
        //获取数据
        val two = sc.textFile("hdfs://192.168.85.128:9000/quchong")
        two.filter(_.trim().length>0) //需要有空格。
            .map(line=>(line.trim,""))//全部值当key,(key value,"")
              .groupByKey()//groupByKey,过滤重复的key value ,发送到总机器上汇总
                  .sortByKey() //按key value的自然顺序排序
                      .keys.collect().foreach(println) //所有的keys变成数组再输出
        //第二种有风险
        two.filter(_.trim().length>0)
              .map(line=>(line.trim,"1"))
                .distinct()
                    .reduceByKey(_+_)
                        .sortByKey()
                            .foreach(println)
     
        //reduceByKey,在本机suffle后,再发送一个总map,发送到一个总机器上汇总,(汇总要压力小)
        //groupByKey,发送本机所有的map,在一个机器上汇总(汇总压力大)
        //如果数据在不同的机器上,则会出现先重复数据,distinct,reduceBykey,只是在本机上去重,谨慎一点的话,在reduceByKey后面需要加多一个distinct
     
      }
    }
  • 相关阅读:
    替换configparser 中指定的值
    configparser 读取与赋值
    接口测试第五步 --》 拼接url
    接口测试第四步 --》 封装excel
    接口测试第三步 --》 封装请求方法
    接口测试第二步 --》 推荐定义一个log 文件
    超级直观理解tcp握手
    crash 潜水
    提高MySQL查询速度
    JSON文件存入MySQL数据库
  • 原文地址:https://www.cnblogs.com/lishengming00/p/12275158.html
Copyright © 2011-2022 走看看