spark学习 计算平均年龄

    使用Java自动生成1000个人的年龄,存储至本地,数据格式如下:

     

左边一列为序号,右边为人的年龄.使用spark读取文件,并计算所有人的平均年龄:

第一种方法:

读入数据 --> 获取文件的第二列(年龄) --> 将年龄生成键值对(1 , age) --> 所有年龄相加(相加之后的数据仍然是键值对(1 , totalAge)),取value值 --> 计算结果.

代码如下:

        /**
         * 读入数据 --> split之后生成的是数组,取第1个 --> 生成键值对(new Tuple2)
         * --> reduceByKey((x,y) -> x+y)之后仍然是键值对,通过values获取值totalAge
         * --> totalAge仍然是RDD,将RDD转换为可访问的元素需要进行collect --> collect
         * 之后的是List,获取List中的元素需要使用get(index) --> 计算结果.
         */
        JavaRDD<String> data = sc.textFile("/home/greg/data/code/Java/SparkIDEA/src/resource/data.txt");
        JavaRDD<String> age = data.map(line -> line.split(" ")[1]);
        JavaPairRDD<Integer , Integer> agePair = age.mapToPair(line -> new Tuple2<>(1 , Integer.parseInt(line)));
        JavaRDD<Integer> totalAge = agePair.reduceByKey((x , y) -> x + y).values();
        System.out.println("person = " + data.count() + "\t" + "totalAge = " + totalAge.collect());
        totalAge.collect().toArray();
        System.out.println("ayerage age = " + (totalAge.collect().get(0) / data.count()));
第二种方法:

        /**
         * 读入数据 --> 获取文件的第二列并将其转换为Integer类型 --> 直接进行reduce((a,b) -> a+b)
         * reduce返回Integer类型 --> 计算结果
         */
        JavaRDD<String> data = sc.textFile("/home/greg/data/code/Java/SparkIDEA/src/resource/data.txt");
        JavaRDD<Integer> age = data.map(line -> Integer.parseInt(line.split(" ")[1]));
        Integer totalAge = age.reduce((a , b) -> a + b);
        System.out.println("person = " + data.count() + "\t" + "totalAge = " + totalAge);
        System.out.println("ayerage age = " + (totalAge / data.count()));
结果:


注意lambda表达式的写法.


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值