• 寒假学习进度七


    .

    编写独立应用程序实现数据去重
    对于两个输入文件 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
     
      }
    }
     
  • 相关阅读:
    算法时间复杂度
    C#箴言:定义常量的两种方法
    Java对象池示例
    一种轻量级对象池的设计与实现
    游戏功能逻辑优化
    c#二维数组传递与拷贝
    一个高效的A-star寻路算法(八方向)(
    3DMAX 烘培技术
    Unity3D脚本生命周期
    Unity 组件
  • 原文地址:https://www.cnblogs.com/shnm/p/12293264.html
Copyright © 2020-2023  润新知