題目中沒有給出資料,我的資料是自己使用亂數代碼生成的:

資料生成代碼如下:
Random r = new Random();
FileWriter fw = new FileWriter("生成檔案的路徑以及名稱");
int x = r.nextInt(1100000)-100000;
for(int y = 1;y <= x;y++) {
int sex1 = r.nextInt(10);
int cost = r.nextInt(10000);
String sex;
if (sex1%2 == 1) //性別使用隨機生成的數是奇數或是偶數來判斷
sex = "M";
else
sex = "F";
fw.write(y + " " + sex + " " + cost + "\r\n" );
fw.flush();
}
fw.close();
資料已經有了,接下來就可以統計這座城市一共有多少人,消費總額,人均消費了,
代碼如下:
SparkConf sparkconf = new SparkConf().
setAppName(" ").setMaster("local");
JavaSparkContext sc = new JavaSparkContext(sparkconf);
JavaRDD<String> lines = sc.textFile("資料路徑");
JavaRDD<Integer> rdd1 = lines.map(f->{
return (Integer.valueOf(f.split(" ")[2]));
}); //只取出消費額這一列,并將其轉化成整數型別
long counts = rdd1.count(); //統計城市有多少人
long avg = 0;
int sum = 0;
sum = rdd1.reduce((a, b) -> a + b); //求消費額總額
avg = sum/counts; // 人均消費=總消費額/人數
//輸出
System.out.println("這座城市一共有:" + counts + "人");
System.out.println("這座城市的消費總額為:" + sum + "元");
System.out.println("這座城市的人均消費額為:" + avg + "元");
結果如下:

接下來分別對男性和女性求人數,及最高消費額,我們可以根據性別得到兩個RDD,然后可以排序,求首尾的資料即可,也可以直接比大小得到,
我是通過比較大小得出的最高最低消費,沒有使用排序的方式,
代碼如下:
SparkConf sparkconf = new SparkConf().
setAppName(" ").setMaster("local");
JavaSparkContext sc = new JavaSparkContext(sparkconf);
JavaRDD<String> lines = sc.textFile("資料路徑");
JavaPairRDD<String, Integer> rdd1 =
lines.mapToPair(f->new Tuple2<>(f.split(" ")[1],Integer.valueOf(f.split(" ")[2])));
JavaPairRDD<String, Integer>rddM1 = rdd1.filter(f->{
return (f._1().contains("M"));
}); //只保留含有M的資料
JavaPairRDD<String, Integer>rddF1 = rdd1.filter(f->{
return (f._1().contains("F"));
}); //只保留含有F的資料
JavaPairRDD<String, Integer> MAXM = rddM1.reduceByKey((x,y)->MAX(x,y)); //消費額比較大小保留大的,下面同理
JavaPairRDD<String, Integer> MAXF = rddF1.reduceByKey((x,y)->MAX(x,y));
JavaPairRDD<String, Integer> MINM = rddM1.reduceByKey((x,y)->MIN(x,y));
JavaPairRDD<String, Integer> MINF = rddF1.reduceByKey((x,y)->MIN(x,y));
MINF.foreach(x -> System.out.println("女性最低消費"+x._2));
MINM.foreach(x -> System.out.println("男性最低消費"+x._2));
MAXF.foreach(x -> System.out.println("女性最高消費"+x._2));
MAXM.foreach(x -> System.out.println("男性最高消費"+x._2));
long countsM = rddM1.count(); //統計人數
long countsF = rddF1.count();
System.out.println("男性人數為:"+countsM + "\n" + "女性人數為:" + countsF);
比較大小函式:
public static int MAX(int x,int y) {
if (x<y) {
return y;
}else {
return x;
}
}
public static int MIN(int x,int y) {
if (x<y) {
return x;
}else {
return y;
}
}
最終結果:

不足之處,歡迎指正,hhh
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/395074.html
標籤:其他
上一篇:Zeppelin安裝配置
