Hadoop之MapReduce程序应用一读取专利引用数据集并对它进行倒排
摘要:MapReduce程序處理專利數據集。
關鍵詞:MapReduce程序 ? 專利數據集
數據源:專利引用數據集cite75_99.txt。(該數據集可以從網址http://www.nber.org/patents/下載)
問題描述:
讀取專利引用數據集并對它進行倒排。對于每一個專利,找到那些引用它的專利并進行合并。top5輸出結果如下:
1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3964859, 4647229
10000 ? ? ? ? ? ? ? ? ? ? ? ? ? ?4539112
100000 ? ? ? ? ? ? ? ? ? ? ? ? ? 5031388
1000006 ? ? ? ? ? ? ? ? ? ? ? ? ?4714284
1000007 ? ? ? ? ? ? ? ? ? ? ? ? ?4766693
解決方案:
1 ?開發工具: ?VM10+Ubuntu12.04+hadoop1.1.2+eclipse
2 ?在eclipse中創建一個工程,并且在工程里添加一個Java類。
程序清單如下:
package com.wangluqing;
import java.io.IOException;?
import java.util.Iterator;?
import org.apache.Hadoop.conf.Configuration;?
import org.apache.hadoop.conf.Configured;?
import org.apache.hadoop.fs.Path;?
import org.apache.hadoop.io.Text;?
import org.apache.hadoop.mapred.FileInputFormat;?
import org.apache.hadoop.mapred.FileOutputFormat;?
import org.apache.hadoop.mapred.JobClient;?
import org.apache.hadoop.mapred.JobConf;?
import org.apache.hadoop.mapred.KeyValueTextInputFormat;?
import org.apache.hadoop.mapred.MapReduceBase;?
import org.apache.hadoop.mapred.Mapper;?
import org.apache.hadoop.mapred.OutputCollector;?
import org.apache.hadoop.mapred.Reducer;?
import org.apache.hadoop.mapred.Reporter;?
import org.apache.hadoop.mapred.TextOutputFormat;?
import org.apache.hadoop.util.Tool;?
import org.apache.hadoop.util.ToolRunner;
public class MyJob1 extends Configured implements Tool {
public static class MapClass extends MapReduceBase implements Mapper<Text,Text,Text,Text> {
@Override
public void map(Text key, Text value, OutputCollector<Text, Text> output,
Reporter reporter) throws IOException {
// TODO Auto-generated method stub
output.collect(value, key);
}
}
public static class Reduce extends MapReduceBase implements Reducer<Text,Text,Text,Text> {
@Override
public void reduce(Text key, Iterator<Text> values,
OutputCollector<Text, Text> output, Reporter reporter)
throws IOException {
// TODO Auto-generated method stub
String csv = "";
while(values.hasNext()) {
if(csv.length()>0)?
csv += ",";
csv += values.next().toString();
}
output.collect(key, new Text(csv));
}
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String[] arg={"hdfs://hadoop:9000/user/root/input/cite75_99.txt","hdfs://hadoop:9000/user/root/output"};
int res = ToolRunner.run(new Configuration(),new MyJob1(), arg);
System.exit(res);
}
public int run(String[] args) throws Exception {
// TODO Auto-generated method stub
Configuration conf = getConf();?
JobConf job = new JobConf(conf, MyJob1.class);?
Path in = new Path(args[0]);?
Path out = new Path(args[1]);?
FileInputFormat.setInputPaths(job, in);?
FileOutputFormat.setOutputPath(job, out);
job.setJobName("MyJob");?
job.setMapperClass(MapClass.class);?
job.setReducerClass(Reduce.class);?
job.setInputFormat(KeyValueTextInputFormat.class);?
job.setOutputFormat(TextOutputFormat.class);?
job.setOutputKeyClass(Text.class);?
job.setOutputValueClass(Text.class);?
job.set("key.value.separator.in.input.line", ",");?
JobClient.runJob(job);?
return 0;
}
}
運行Run on hadoop,在Ubuntu 下執行命令
hadoop fs -cat ?/usr/root/output/part-00000 ?| ?head
可以查看到經過MapReduce程序處理后的結果。
總結:
第一:可以采用裝有Hadoop版本對應插件的Eclipse集成開發工具進行MapReduce程序開發。
第二:根據數據流和問題域設計和編寫MapReduce程序。
Resource:
1?http://www.wangluqing.com/2014/03/hadoop-mapreduce-programapp1/?
2 參考《Hadoop實戰》第四章 MapReduce基礎程序
總結
以上是生活随笔為你收集整理的Hadoop之MapReduce程序应用一读取专利引用数据集并对它进行倒排的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop之HDFS文件操作
- 下一篇: 从类似如下的文本文件中读取出所有的姓名,