资源简介
山东大学大数据课程的实验二。基于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版本贪吃蛇
- shiro-all-1.4.0.jar
- 图书管理系统数据持久化
- 《Java程序性能优化:让你的Java程序更
- java制作工作证和调用斑马打印.rar
- java udp多人聊天室
-
org.springfr
amework.context-3.2.2.RELEASE.j - java下通过ajax调用Echarts案例
- java与plc通讯
- java开发的rpg游戏
- java任务管理系统
- 用Java中Swing实现满天星源码+文档
- java学生信息管理系统源代码
- JAVA时间工具类计算法定工作日工时等
- java开发走迷宫可视化源码程序
- Floyd算法-java实现
- java面向对象程序设计答案
- java课设-保存计算过程的计算器代码
- Java实验报告(房屋销售管理信息系统
- 商场销售管理系统 java netbeans
- 基于JAVA的安全的通讯软件源代码
- Java 音频wav等播放 循环 停止
- 网上排课系统 附带数据库可以运行
- 北大青鸟accp5.0java第六章理论加上机作
- 网络画板java源代码
- Apriori算法实现及实验报告
- Java 五子棋游戏毕业论文
- 小牛学堂大数据全套视频+实战
- Java Cryptography Extension (JCE) 无限强度
评论
共有 条评论