学校图书馆共有 300 万册图书,想统计其中 Computer , Science ,计算机,科学这几个词出现的次数,并按照自然年度分类,如 2016 年出版的书籍中这几个词各自出现的次数, 2015 年······依次类推。
HashMap<Stirng, Integer> map = new HashMap<>(); map.put("Computer",0); map.put("Science",0); map.put("计算机",0); map.put("科学",0); public HashMap<String, Integer> calculateTimes(HashMap<String, Integer> map,String bookName){ if(bookName.length() <= 0){ return map; } if(bookName.contains("Computer")){ map.put("Computer", map.get("Compute")++); }else if(bookName.contains("Science")){ map.put("Computer", map.get("Science")++); }else if(bookName.contains("计算机")){ map.put("计算机", map.get("计算机")++); }else if(bookName.contains("科学")){ map.put("科学", map.get("科学")++); } return map; }
books.stream().collect(Collectors.groupingBy(Book::getYear,Collectors.groupingBy(Book::getType,Collectors.counting())));
a) 读取文件内容,解析成key、value对。对输入文件的每一行,解析成key、value对。每一个键值对调用一个map函数。
b) 在map函数中可以编写自己的逻辑,对输入的key、value处理,转换成新的key、value输出。
c) 对输出的key、value进行分区。
d) 对不同分区的数据,按照key进行排序、分组。相同key的value放到一个集合中。
2. reduce任务处理
a) 对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。
b) 对多个map任务的输出进行合并、排序。写reduce函数自己的逻辑,对输入的key、reduce处理,转换成新的key、value输出。
c) 把reduce的输出保存到文件中。
HashMap<Stirng, Integer> map = new HashMap<>(); map.put("Computer",0); map.put("Science",0); map.put("计算机",0); map.put("科学",0); public HashMap<String, Integer> calculateTimes(HashMap<String, Integer> map,String bookName){ if(bookName.length() <= 0){ return map; } if(bookName.contains("Computer")){ map.put("Computer", map.get("Compute")++); }else if(bookName.contains("Science")){ map.put("Computer", map.get("Science")++); }else if(bookName.contains("计算机")){ map.put("计算机", map.get("计算机")++); }else if(bookName.contains("科学")){ map.put("科学", map.get("科学")++); } return map; }
public class Demo{ static HashMap<String,Integer> map = new HashMap();static{ map.put("Computer", 0); map.put("Science", 0); map.put("计算机", 0); public void check(File file){ // 非法输入 if (!file.exists()) { return; } InputStream input = null; Scanner scanner = null; try { // 用Scanner读入文件输入流 input = new FileInputStream(file); scanner = new Scanner(input); scanner.useDelimiter("\n"); // 对行的书名进行处理 while (scanner.hasNext()) { calculatorTimes(map, scanner.next()); } } catch (java.io.IOException e) { e.printStackTrace(); } } public void calculatorTimes(HashMap<String, Integer> map, String bookName) { // 非法输入 if (bookName.length() == 0) { return; } if (bookName.contains("Computer")) { map.put("Computer", map.get("Computer")+1); } else if (bookName.contains("Science")) { map.put("Science", map.get("Science")+1); } else if (bookName.contains("计算机")) { map.put("计算机", map.get("计算机")+1); } else if (bookName.contains("科学")) { map.put("科学", map.get("科学") + 1); } }
}
struct Book{ int nYear; long nComputer; long nScience; long n计算机; long n科学; }; struct WordCount{long nComputer; long nScience; long n计算机; long n科学;};
int main()
{
Book arrBooks[3000000] = ReadInData();
WordCount arrWordCount[2016];
for (int i=0; i<3000000; i++)
{ arrWordCount[arrBooks[i].nYrear].nComputer =arrBooks[i].nComputer;arrWordCount[arrBooks[i].nYear].nScience =arrBooks[i].nScience;arrWordCount[arrBooks[i].nYear].n计算机 =arrBooks[i].n计算机;arrWordCount[arrBooks[i].nYear].n科学 =arrBooks[i].n科学;}
// 输出结果
}
import java.util.*;
public class Main{
public static void main(String[] args){
long num = 3000000;//图书总数
Book books[] = new Books[num];
long times = 0;//统计关键词出现次数
for(int i=0;i<num;i++){
if(books[i].hasKeyword()){
times++;
}
}
System.out.println(times);
}
}
class Book{
private String year;//出版年份
private String name;
private boolean hasKeyword;//记录书名是否包含指定的关键词
public Book(String year,String name){
this(); this.year = year;
this.name = name;
}
public boolean hasKeyword(){
if(this.name.contains("Computer")){
return true;
}else if(this.name.contains("Science")){ return true;
}else if(this.name.contains("计算机")){
return true;
}else if(this.name.contains("科学")){
return true;
}else{
return false;
}
}
public void setYear(String year){
this.year = year;
} public String getYear(){
return this.year;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
HashMap<Stirng, Integer> map =newHashMap<>();map.put("Computer",0);map.put("Science",0);map.put("计算机",0);map.put("科学",0);publicHashMap<String, Integer> calculateTimes(HashMap<String, Integer> map,String bookName){if(bookName.length() <=0){returnmap;}if(bookName.contains("Computer")){map.put("Computer", map.get("Compute")++);}elseif(bookName.contains("Science")){map.put("Computer", map.get("Science")++); }elseif(bookName.contains("计算机")){map.put("计算机", map.get("计算机")++);}elseif(bookName.contains("科学")){map.put("科学", map.get("科学")++);}returnmap;}