资源简介
山东大学大数据课程的实验二。基于hadoop集群系统(也可以在伪分布式系统上运行)系统使用Java编写的倒排索引实现,具有使用停词表功能,使用正则表达式选择规范的单词。代码重构了setup(),map(),combiner(),partitation()和reducer()函数,功能是对文档进行倒排索引,得到一个单词有序,且单词的文件列表同样有序的倒排列表集合。
代码片段和文件信息
package com.Test4;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class InvertedIndex {
public static class myMap extends Mapperject Text Text IntWritable>{
private final static IntWritable one = new IntWritable(1);
private URI[] remoteFiles; // 存放停用词txt文档统一资源标识符
private Set stopwords; //存放停用词
public void setup(Context context) throws IOException InterruptedException{
Configuration conf = context.getConfiguration();
remoteFiles = Job.getInstance(conf).getCacheFiles();//获取stop_words.txt
stopwords = new TreeSet(); //对于URI列表里的每一个停用词表
for (int i = 0; i < remoteFiles.length; i++) {
FileInputStream in =new FileInputStream(new Path(remoteFiles[i].getPath()).getName().toString());
//读取文件的每一行
Scanner sc =new Scanner(in);
while (sc.hasNextLine()) {
String line = sc.nextLine();
String[] split = line.trim().split(“ “); //trim():去掉空格 制表符等,split(“ “):依据文件格式可用可不用‘
for (int j = 0; j < split.length; j++) {
stopwords.add(split[j]);
}
}
sc.close();
}
}
public void map(object key Text value Context context) throws IOException InterruptedException {
FileSplit inputSplit = (FileSplit) context.getInputSplit();
String filename=inputSplit.getPath().getName(); //获取文件名
//正则表达式去除特殊字符
String str = “\\w+“;//字母或数字或下划线或汉字
Pattern pattern = Pattern.compile(str);
String line = value.toString().toLowerCase();
StringTokenizer itr = new StringTokenizer(line);
String temp = new String();
for(; itr.hasMoreTokens();) {
temp = itr.nextToken();
Matcher ma = pattern.matcher(temp);
while(ma.find()) {
String word = ma.group();
if(!stopwords.contains(word)) {
Text text = new Text();
text.set(word+“#“+filename); //key = word+#+filename
context.write(text one);
}
}
}
}
}
public static class myCombiner extends Reducer{
public void reduce(Text key Iterable values Context context) throws IOException InterruptedException {
int sum = 0;
for (IntWritable val : values) {
- 上一篇:阿里支付jar包
- 下一篇:成绩的查询和排序功能实现 java实现
相关资源
- java 毕业设计 进销存管理系统 源码
- java图片浏览器跨平台运行程序与源码
- 基于java的在线考试系统-毕业设计
- 微博系统(Java源码,servlet+jsp),适
- java串口通信全套完整代码-导入eclip
- jsonarray所必需的6个jar包.rar
- 三角网构TIN生成算法,Java语言实现
- java代码编写将excel数据导入到mysql数据
- Java写的cmm词法分析器源代码及javacc学
- JAVA JSP公司财务管理系统 源代码 论文
- JSP+MYSQL旅行社管理信息系统
- 推荐算法的JAVA实现
- 基于Java的酒店管理系统源码(毕业设
- java-图片识别 图片比较
- android毕业设计
- java23种设计模式+23个实例demo
- java Socket发送/接受报文
- JAVA828436
- java界面美化 提供多套皮肤直接使用
- 在线聊天系统(java代码)
- 基于Java的图书管理系统807185
- java中实现将页面数据导入Excel中
- java 企业销售管理系统
- java做的聊天系统(包括正规课程设计
- Java编写的qq聊天室
- 商店商品管理系统 JAVA写的 有界面
- JAVA开发聊天室程序
- 在linux系统下用java执行系统命令实例
- java期末考试试题两套(答案) 选择(
- JAVA3D编程示例(建模、交互)
评论
共有 条评论