学校图书馆共有 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;}