本文共 5054 字,大约阅读时间需要 16 分钟。
链接: https://pan.baidu.com/s/1bmRPvKpXwBwmZqKKhfMSnA 提取码: 5vxq
package count;import java.io.*;import java.util.*;/** * @author sunyong * @date 2020/06/20 * @description * 考试:读取一个文件内容,分析其中内容获取相关数据 */public class Test { /* * @param path:存入的路径 * @param content:文件内容 */ public static void write(String path,String content) throws IOException { //定义一个输出字符流 FileWriter fw = new FileWriter(path); //定义一个输出缓冲流(装入之前的输出字符流) BufferedWriter bw = new BufferedWriter(fw); //写入内容 fw.write(content); //关闭流(先开的后关) bw.close(); fw.close(); } /* * @param filePath :读取的文件路径 */ public static void getUserName(String filePath) { try { //字符输入流 FileReader fr = new FileReader(filePath); //缓冲输入流包装字符输入流 BufferedReader br = new BufferedReader(fr); //定义最大消费次数的名字 String maxCountUserName = null; //读取文件中的内容 String str = null; // key是名字 list里面放该用户每次消费的金额 list.size()该用户出现的次数 HashMap> map = new HashMap<>(); while(!((str = br.readLine()) ==null)) { //按照": "打断为一个字符串数组 String[] split = str.split(":"); //给名字赋值 String name = split[0]; //第二个字符串为消费金额 Integer money = Integer.valueOf(split[1]); if(map.containsKey(name)) { //如果map内出现过某个用户的处理流程 //获取该用户的消费金额集合 List list = map.get(name); //把该次消费金额加入该集合后再覆盖map list.add(money); map.put(name, list); }else{ //没出现过某个用户的处理流程 ArrayList integers = new ArrayList (); integers.add(money); map.put(name,integers ); } } //使用迭代器遍历map键值对 Iterator >> iterator = map.entrySet().iterator(); Integer num = 0; while(iterator.hasNext()) { Map.Entry > next = iterator.next(); //获取键值对的键 String name1 = next.getKey(); //获取值 List moneyNum = next.getValue(); //找最大消费次数 if(moneyNum.size()>num) { num = moneyNum.size(); maxCountUserName = name1; } } String s0 = "最大消费次数:"+num; System.out.println(s0); String s1 = "消费次数最多的用户是:"+ maxCountUserName; System.out.println(s1); /* * 使用map的get方法获取值-->存金额的集合 * 通过遍历消费次数最多的的那个用户的消费记录, * 寻找出消费次数最多的的那个用户的消费金额最大的那次 */ List list2 = map.get(maxCountUserName); Iterator iterator1 = list2.iterator(); Integer maxMoney = 0; while(iterator1.hasNext()) { Integer next = iterator1.next(); if(next > maxMoney ) { maxMoney = next; } } String s2 ="该用户一次消费最大金额是:"+maxMoney; System.out.println(s2); //获取所有的键遍历-->查看到底有几个人 Set set=map.keySet(); Iterator iterator2 = set.iterator(); while (iterator2.hasNext()){ System.out.println(iterator2.next()); } //关闭流 br.close(); fr.close(); //写入文件 write("result.txt",s0+"\r\n"+s1+"\r\n"+s2); } catch (Exception e) { e.printStackTrace(); } } //测试 public static void main(String[] args) { //查找次数最大的人并且写入文件 getUserName("F:\\sunyong\\Java\\codes\\examination\\buy_record.txt"); }}
#计算消费次数sc.textFile("/data/test.txt").map(_.split(":")).map(x=>(x(0),x)).groupBy(_._1).map(x=>(x._1,x._2.size)).collect#根据名字分组,最大消费金额,消费总数val rdd1 = sc.textFile("/data/test.txt").map(_.split(":")).map(x=>(x(0),x(1))).groupBy(_._1).map(x=>(x._1,x._2.map(x=>x._2))).map(x=>(x._1,x._2.map(x=>x.toInt).sum,x._2.map(x=>x.toInt).max))查询最大消费的人rdd1.sortBy(-_._2).take(1)
scala> sc.textFile("/data/test.txt").map(_.split(":")).map(x=>(x(0),x)).groupBy(_._1).map(x=>(x._1,x._2.size)).collectres25: Array[(String, Int)] = Array((项羽,49279), (韩信,49573), (孙膑,49312), (白起,49392), (养由基,49480), (孙武,49415))scala> sc.textFile("/data/test.txt").map(_.split(":")).map(x=>(x(0),x)).groupBy(_._1).map(x=>(x._1,x._2.size)).collectres26: Array[(String, Int)] = Array((项羽,49279), (韩信,49573), (孙膑,49312), (白起,49392), (养由基,49480), (孙武,49415))scala> val rdd1 = sc.textFile("/data/test.txt").map(_.split(":")).map(x=>(x(0),x(1))).groupBy(_._1).map(x=>(x._1,x._2.map(x=>x._2))).map(x=>(x._1,x._2.map(x>x.toInt).sum,x._2.map(x=>x.toInt).max))rdd1: org.apache.spark.rdd.RDD[(String, Int, Int)] = MapPartitionsRDD[158] at map at:24scala> rdd1.sortBy(-_._2).take(1)res27: Array[(String, Int, Int)] = Array((韩信,272142491,9999))
转载地址:http://jdjxi.baihongyu.com/