2020-11-27

对2亿个数排序,取中位数

新生区设为50m时

/usr/local/spark/bin/spark-submit --master yarn --deploy-mode client   --num-executors=2  --executor-cores=12 --executor-memory 6g  --conf "spark.executor.extraJavaOptions=-Xmn50M -XX:SurvivorRatio=8 -verbose:gc -XX:+PrintGCDetails -XX:+PrintHeapAtGC" /home/vicky/mr-1.0-SNAPSHOT.jar 200

新生区为100m时

新生区为200m时

新生区为1300m时

 public static void getMid(Integer reducePart) throws Exception {
        System.out.println(reducePart);
        long start=System.currentTimeMillis();
        SparkConf conf = new SparkConf().setAppName("HelloWorld")
//                .setMaster("local[12]")
                .setMaster("yarn")
        ;
        JavaSparkContext sc = new JavaSparkContext(conf);
//        sc.setLogLevel("ERROR");
        SQLContext sqlContext = new SQLContext(sc);

        JavaRDD<Integer> rdd= sc.textFile("hdfs://master:9000/num",24).map(new Function<String, Integer>() {
            @Override
            public Integer call(String v1) throws Exception {
                return Integer.valueOf(v1);
            }
        });
//        rdd.cache();
       long count= rdd.count();

       System.out.print(
           rdd.sortBy(new Function<Integer, Integer>() {
               @Override
               public Integer call(Integer v1) throws Exception {
                   return v1;
               }
           },false,reducePart).zipWithIndex().filter(new Function<Tuple2<Integer, Long>, Boolean>() {
               @Override
               public Boolean call(Tuple2<Integer, Long> v1) throws Exception {
                   return v1._2()==count/2;
               }
           }).collect().get(0)
       );

//        System.out.print( "top10="+rdd.takeOrdered(10,new MyCompare()));
        System.out.println("timeuse="+(System.currentTimeMillis()-start));
    }

用了三台虚拟机,两个工作节点配置如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值