spark学习 计算平均年龄

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

    spark学习 计算平均年龄_第1张图片 

左边一列为序号,右边为人的年龄.使用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 data = sc.textFile("/home/greg/data/code/Java/SparkIDEA/src/resource/data.txt");
        JavaRDD age = data.map(line -> line.split(" ")[1]);
        JavaPairRDD agePair = age.mapToPair(line -> new Tuple2<>(1 , Integer.parseInt(line)));
        JavaRDD 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 data = sc.textFile("/home/greg/data/code/Java/SparkIDEA/src/resource/data.txt");
        JavaRDD 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表达式的写法.


你可能感兴趣的:(spark)