当前位置: 首页 > news >正文

网站建设哪家好万维科技/小学生关键词大全

网站建设哪家好万维科技,小学生关键词大全,新疆城乡住房建设厅网站,做app要多少钱从wordcount词频统计代码到倒排索引的改编 分析word count代码 Map中输出了单词和intwriteable类的对象one,而倒排索引,需要输出单词和文件名偏移,偏移是key中含有的,使用.tostring方法就可以将它变成字符串与文件名和连接。要输出…

从wordcount词频统计代码到倒排索引的改编
分析word count代码
Map中输出了单词和intwriteable类的对象one,而倒排索引,需要输出单词和文件名@偏移,偏移是key中含有的,使用.tostring方法就可以将它变成字符串与文件名和@连接。要输出文件名,需要导入Fliesplit类,将输入的文件分开,并通过.getname()方法获得文件名。
Reduce中,wordcount输入是单词和intwriteable类的one,输出是单词和sum后的数字。而倒排索引输入是单词和Text类的字符串,并将相同单词的字符串通过“;”拼接起来。
修改后的代码
package wordcount;
//导入必要的package
import java.io.IOException; //报错类
import java.util.Iterator;//迭代器,与string和next有关
import java.util.StringTokenizer; //StringTokenizer类,用于将空白字符作为分割符的类
import org.apache.hadoop.mapreduce.lib.input.FileSplit;//文件分割类,使用它可以获取文件的文件路径等信息。
import org.apache.hadoop.conf.Configuration;//Hadoop中用于读取配置信息的类
import org.apache.hadoop.fs.Path; //有关文件系统输入输出数据的类
import org.apache.hadoop.io.IntWritable; //封装定义了IntWritable类
import org.apache.hadoop.io.Text; //封装定义了Text类
import org.apache.hadoop.mapreduce.Job; //封装定义了Job类
import org.apache.hadoop.mapreduce.Mapper; //封装定义了Mapper类
import org.apache.hadoop.mapreduce.Reducer; //封装定义了Reducer类
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; //文件输入要用到的类
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; //文件输出要用到的类
import org.apache.hadoop.util.GenericOptionsParser; //GenericOptionsParser类,用来解释常用hadoop命令,并根据需要为Configuration对象设置相应的值

public class daopai{

public static class TokenizerMapper
extends Mapper<Object, Text, Text, Text>{ //自定义的TokenizerMapper类,继承自前面导入的Mapper类
@Override//想重写父类的方法,比如toString()方法的话,在方法前面加上@Override 系统可以帮你检查方法的正确性
public void map(Object key, Text value, Context context //定义Map方法
) throws IOException, InterruptedException {

//这里说一下context类,它是Mapper的一个内部类,它用来与MapReduce系统进行通信,如把map的结果传给reduce处理。简单的说顶级接口用它在map或是reduce任务中跟踪task的状态,MapContext就是记录了map执行的上下文,在mapper类中,这个context可以存储一些job conf的信息,同时context作为了map和reduce执行中各个函数的一个桥梁,我们可以在map函数中处理这个信息
final Text word = new Text(); //实例化了一个Text类的对象word
final FileSplit fs;//实例化了一个FileSplit类的对象fs
fs = (FileSplit)context.getInputSplit();//将input的文件分割
String docName = fs.getPath().getName();//获取当前的文件名。
StringTokenizer itTokenizer = new StringTokenizer(value.toString());
StringTokenizer itr = new StringTokenizer(value.toString());//实例化了一个以空白字符为分隔符的StringTokenizer类的对象itr
Text fileName_lineOffset=new Text(docName+’@’+key.toString()+’;’);
while (itr.hasMoreTokens()) {//如果判断还有下一个分隔符(空格)
word.set(itr.nextToken()); //则输出并返回之间的字符串给word
context.write(word, fileName_lineOffset); //context.write方法将(word,fileName_lineOffset)这样的二元组存入context中
}
}
}

public static class IntSumReducer //自定义的IntSumReducer类,继承自前面导入的Reducer类
extends Reducer<Text,Text,Text,Text> {
private Text result =new Text(); //实例化了一个IntWritable类的result对象

public void reduce(Text key, Iterable<Text> values,Context context//定义Reduce方法,这里迭代器(Iterator)是一种设计模式,它是一个对象,它可以遍历并选择序列(IntWritable)中的对象,而开发人员不需要了解该序列的底层结构。) throws IOException, InterruptedException {StringBuffer temp = new StringBuffer();
for(Text val:values){temp.append(val.toString());//StringBuffer只能用append方法}
String lala = temp.toString().substring(0,temp.toString().lastIndexOf(";"));//根据题目要求去掉最后一个分号result.set(lala);//将sum赋给resultcontext.write(key, result);//输出最终结果
}

}

public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
//运行MapReduce程序前都要初始化Configuration,该类主要是读取MapReduce系统配置信息,这些信息包括hdfs还有MapReduce,也就是安装hadoop时候的配置文件例如:core-site.xml、hdfs-site.xml和mapred-site.xml等等文件里的信息,有些童鞋不理解为啥要这么做,这个是没有深入思考MapReduce计算框架造成,我们程序员开发MapReduce时候只是在填空,在map函数和reduce函数里编写实际进行的业务逻辑,其它的工作都是交给MapReduce框架自己操作的,但是至少我们要告诉它怎么操作啊,比如hdfs在哪里,MapReduce的jobstracker在哪里,而这些信息就在conf包下的配置文件里。

String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length < 2) {System.err.println("Usage: wordcount <in> [<in>...] <out>");System.exit(2);
}//If的语句好理解,就是运行WordCount程序时候一定是两个参数,如果不是就会报错退出。至于第一句里的GenericOptionsParser类,它是用来解释常用hadoop命令,并根据需要为Configuration对象设置相应的值
Job job = Job.getInstance(conf, "daopai");//用Job.getInstance方法设置作业名为word count
job.setJarByClass(daopai.class);           //为job的输出数据设置Key类
job.setMapperClass(TokenizerMapper.class);    //设置Mapper类(Map阶段使用)
job.setReducerClass(IntSumReducer.class);     //设置Reducer类(Reduce阶段使用)
job.setOutputKeyClass(Text.class);            //为job的输出数据设置Key类,规定Reduce输出的Key类型为Text
job.setOutputValueClass(Text.class);   //设置Reduce输出的Value类型为Textfor (int i = 0; i < otherArgs.length - 1; ++i) { //设置输入输出路径      FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
}
FileOutputFormat.setOutputPath(job,new Path(otherArgs[otherArgs.length - 1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);//等待任务执行完毕退出

}
}
输出结果

http://www.jmfq.cn/news/5270941.html

相关文章:

  • 郴州网站优化/营销战略
  • 做美图+网站有哪些/营销软文写作
  • 武汉做网站建设/win10优化大师免费版
  • 网站建设图片怎么做/百度的广告
  • 开发网址需要多少钱/巢湖seo推广
  • 男女做那些事免费网站/排名优化seo公司
  • 医院网站建设合同/品牌推广外包公司
  • 网站设计的思想/东莞网站建设seo
  • 医药网站设计/站长工具精品
  • 成都网站设计哪家好/房管局备案查询网站
  • 通用wap网站生成系统/百度怎么做广告
  • 怀化信访网站/seo运营学校
  • 绍兴网站制作推广/网站制作郑州
  • 深圳珠宝网站建设/爱站工具网
  • 推网站/郑州网络营销推广机构
  • 政府网站建设申论/郑州推广优化公司
  • 全网最大的精品网站/汕头网站建设开发
  • 昆明网站建设公司猫咪科技/巨量算数数据分析
  • 深圳网站建设 网站设计/sem竞价培训班
  • 织梦网站防止注入/抖音怎么推广
  • web购物网站/加盟
  • 网站开发软件怎么做/脱发严重是什么原因引起的
  • 无锡哪里有做网站/百度指数的使用方法
  • 杭州专业网站制作设计/steam交易链接怎么改
  • jquery网站模板下载/百度网址导航主页
  • 网站的测试方法/百度学术官网论文查重免费
  • 北流网站建设/seo优化教程下载
  • 网站注册表单怎么做/站长之家查询工具
  • 武汉有哪些比较好的网站开发公司/专业网站优化推广
  • 做网站靠广告一年赚多少钱/百度推广平台