如何安装网站,网站关键词怎么选择,昆山网站公司,整个网页截图快捷键原文引自#xff1a;http://blog.csdn.net/fengzhimohan/article/details/78564610 a. 案例描述 本案例假设我们需要对某个省的人口 (10万) 性别还有身高进行统计#xff0c;需要计算出男女人数#xff0c;男性中的最高和最低身高#xff0c;以及女性中的最高和最低身高。本…原文引自http://blog.csdn.net/fengzhimohan/article/details/78564610 a. 案例描述 本案例假设我们需要对某个省的人口 (10万) 性别还有身高进行统计需要计算出男女人数男性中的最高和最低身高以及女性中的最高和最低身高。本案例中用到的源文件有以下格式, 三列分别是 ID性别身高 (cm)格式如下 b.人口数据的生成 利用Java语言随机生成一组人口数据包括序列ID性别M/F身高cm代码如下 1 import java.io.File;2 import java.io.FileWriter;3 import java.io.IOException;4 import java.util.Random;5 6 /**7 * Created by Administrator on 2017/11/13.8 */9 public class PeopleInfoFileGenerator {
10 public static void main(String[] args){
11 File file new File(F:\\PeopleInfo.txt);
12
13 try {
14 Random random new Random();//生成随机数
15 FileWriter fileWriter new FileWriter(file);//新建一个文件
16 for (int i1;i1000000;i){ //生成10万个数字
17 int height random.nextInt(220);
18 if (height 50) {
19 height height 50;
20 }
21 String gender getRandomGender(); //性别方法
22 if (height 100 gender M) {
23 height height 100;
24 }
25 if (height 100 gender F) {
26 height height 40;
27 }
28 fileWriter.write( i getRandomGender() height); //文件格式ID 性别 身高
29 fileWriter.write(System.getProperty(line.separator));
30 }
31 fileWriter.flush();
32 fileWriter.close();
33 System.out.println(People Information File generated successfully.);
34 }catch (IOException e){
35 e.printStackTrace();
36 }
37 }
38
39 public static String getRandomGender(){ //构建一个随机生成性别方法
40 Random random new Random();
41 int randomNum random.nextInt(2) 1;
42 if( randomNum % 2 0){
43 return M;
44 }else{
45 return F;
46 }
47 }
48 } c. 实例过程分析 对于这个案例我们要分别统计男女的信息那么很自然的想到首先需要对于男女信息从源文件的对应的 RDD 中进行分离这样会产生两个新的 RDD分别包含男女信息其次是分别对男女信息对应的 RDD 的数据进行进一步映射使其只包含身高数据这样我们又得到两个 RDD分别对应男性身高和女性身高最后需要对这两个 RDD 进行排序进而得到最高和最低的男性或女性身高。 第一步先分离男女信息使用 filter 算子过滤条件包含”M” 的行是男性包含”F”的行是女性第二步我们需要使用 map 算子把男女各自的身高数据从 RDD 中分离出来第三步我们需要使用 sortBy 算子对男女身高数据进行排序。 特别注意RDD 转化的过程中需要把身高数据转换成整数否则 sortBy 算子会把它视为字符串那么排序结果就会受到影响例如 身高数据如果是123,110,84,72,100那么升序排序结果将会是 100,110,123,72,84显然这是不对的。 d.求出身高统计代码实现 1 import org.apache.spark.SparkConf;2 import org.apache.spark.api.java.JavaRDD;3 import org.apache.spark.api.java.JavaSparkContext;4 import org.apache.spark.api.java.function.FlatMapFunction;5 import org.apache.spark.api.java.function.Function;6 import java.util.Arrays;7 /**8 * Created by Administrator on 2017/11/17.9 */
10 public class PeopleInfoCalculator {
11 public static void main(String[] args){
12 SparkConf sparkConf new SparkConf().setAppName(PeopleInfoCalculator).setMaster(local[3]);
13 JavaSparkContext sc new JavaSparkContext(sparkConf);
14 JavaRDDString dataFile sc.textFile(F:\\PeopleInfo.txt);
15
16 JavaRDDString maleFilterData dataFile.filter(new FunctionString, Boolean() {//过滤出性别为M的数据
17 Override
18 public Boolean call(String s) throws Exception {
19 return s.contains(M);
20 }
21 });
22 JavaRDDString femaleFilterData dataFile.filter(new FunctionString, Boolean() {//过滤出性别为F的数据
23 Override
24 public Boolean call(String s) throws Exception {
25 return s.contains(F);
26 }
27 });
28 JavaRDDString maleHeightData maleFilterData.flatMap(new FlatMapFunctionString, String() {//得到性别为M的身高数据
29 Override
30 public IterableString call(String s) throws Exception {
31 return Arrays.asList(s.split( )[2]);
32 }
33 });
34 JavaRDDString femaleHeightData femaleFilterData.flatMap(new FlatMapFunctionString, String() {//得到性别为F的身高数据
35 Override
36 public IterableString call(String s) throws Exception {
37 return Arrays.asList(s.split( )[2]);
38 }
39 });
40 JavaRDDInteger maleHeightDataInt maleHeightData.map(new FunctionString, Integer() {//将字符串格式转化为整型格式
41 Override
42 public Integer call(String s) throws Exception {
43 return Integer.parseInt(String.valueOf(s));
44 }
45 });
46 JavaRDDInteger femaleHeightDataInt femaleHeightData.map(new FunctionString, Integer() {//将字符串格式转化为整型格式
47 Override
48 public Integer call(String s) throws Exception {
49 return Integer.parseInt(String.valueOf(s));
50 }
51 });
52 //sortBy(T,ascending,numPartitions) 解释:
53 //第一个参数是一个函数该函数的也有一个带T泛型的参数返回类型和RDD中元素的类型是一致的
54 //第二个参数是ascending这参数决定排序后RDD中的元素是升序还是降序默认是true也就是升序
55 //第三个参数是numPartitions该参数决定排序后的RDD的分区个数默认排序后的分区个数和排序之前的个数相等即为this.partitions.size。
56 JavaRDDInteger maleHeightLowSort maleHeightDataInt.sortBy(new FunctionInteger,Integer(){// true表示默认排序为升序排序从低到高排
57 public Integer call(Integer s) throws Exception {
58 return s;
59 }
60 },true,3);
61 JavaRDDInteger femaleHeightLowSort femaleHeightDataInt.sortBy(new FunctionInteger,Integer(){// true表示默认排序为升序排序从低到高排
62 public Integer call(Integer s) throws Exception {
63 return s;
64 }
65 },true,3);
66 JavaRDDInteger maleHeightHightSort maleHeightDataInt.sortBy(new FunctionInteger,Integer(){// false表示为降序排序从高到低
67 public Integer call(Integer s) throws Exception {
68 return s;
69 }
70 },false,3);
71 JavaRDDInteger femaleHeightHightSort femaleHeightDataInt.sortBy(new FunctionInteger,Integer(){// true表示默认排序为降序排序从低到高排
72 public Integer call(Integer s) throws Exception {
73 return s;
74 }
75 },false,3);
76 Integer lowestMale maleHeightLowSort.first(); //求出升序的第一个数即最小值
77 Integer lowestFemale femaleHeightLowSort.first();//求出升序的第一个数即最小值
78 Integer highestMale maleHeightHightSort.first();//求出降序的第一个数即最大值
79 Integer highestFemale femaleHeightHightSort.first();//求出降序的第一个数即最大值
80
81 System.out.println(Number of Female Peole: femaleHeightData.count());//求出女性的总个数
82 System.out.println(Number of Male Peole: maleHeightData.count());//求出男性的总个数
83 System.out.println(Lowest Male: lowestMale);//求出男性最矮身高
84 System.out.println(Lowest Female: lowestFemale);//求出女性最矮身高
85 System.out.println(Highest Male: highestMale);//求出男性最高身高
86 System.out.println(Highest Female: highestFemale);//求出女性最高身高
87
88 }
89 } e.运行结果 转载于:https://www.cnblogs.com/jinggangshan/p/8109329.html