基于hadoop的网页元素抽取
来源:互联网 发布:知らないうちに百度云 编辑:程序博客网 时间:2024/06/18 10:42
关于Hadoop的介绍
hadoop是分布式文件系统(也就是HDFS),或者一个同类的分布式文件系统,管理着集群的数据。Hadoop提供了一套基础设施来处理大多数困难的工作以保证任务能够执行成功。MapReduce是一种计算模型,该模型可将大型数据处理任务分解成很多单个的、可以在服务器集群中并行执行的任务。这些任务的计算结果可以合并在一起来计算最终的结果。
在Ubuntu下使用Hadoop编程:
安装hadoop:http://www.powerxing.com/install-hadoop/
在eclipse中编写hadoop的代码:http://www.powerxing.com/hadoop-build-project-using-eclipse/
hadoop的数据类型
BooleanWritable 标准布尔变量的封装 ByteWritable 单字节数的封装 DoubleWritable 双字节数的封装 FloatWritable 浮点数的封装 IntWritable 整数的封装 LongWritable Long的封装 Text 使用UTF8格式的文本封装 NullWritable 无键值时的站位符
关于map和Reducer:
Mapper接口负责数据处理阶段。它采用的形式为Mapper< K1,V1,K2,V2 >Java泛型,这里键类和值类分别实现WritableComparable和Writable接口。Mapper只有一个方法–map,用于处理一个单独的键/值对。
Reducer任务接收来自各个mapper的输出时,它按照键/值对中的键对输入数据进行排序,并将相同键的值归并。然后调用reduce()函数,并通过迭代那些与指定键相关联的值,生成一个列表(K3,V3)
编写的代码示例
package org.apache.hadoop.examples;import java.io.IOException;import java.util.StringTokenizer;import java.util.regex.Matcher;import java.util.regex.Pattern;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.output.FileOutputFormat;import org.apache.hadoop.util.GenericOptionsParser;public class WordCount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{ private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context) throws IOException, InterruptedException{ String line = value.toString(); line = line.replace("\\", ""); String regex = "性别:</span><span class=\"pt_detail\">(.*?)</span>"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(line); while(matcher.find()){ String term = matcher.group(1); word.set(term); context.write(word, one); } } } public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable>{ private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException{ int sum = 0; for(IntWritable val :values){ sum+= val.get(); } result.set(sum); context.write(key, result); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if(otherArgs.length != 2){ System.err.println("Usage: wordcount <in> <out>"); System.exit(2); } Job job = new Job(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); System.exit(job.waitForCompletion(true)?0:1); }}
0 0
- 基于hadoop的网页元素抽取
- [原]基于统计的中文网页正文抽取的研究
- 网页正文的抽取
- Java实现的基于模板的网页结构化信息精准抽取组件:HtmlExtractor
- 基于标题和正文依存树的中文网页正文抽取方法
- 基于语义和规则的Web网页细粒度信息抽取方法
- 基于行块分布函数的通用网页正文抽取算法初步认识
- 基于行块分布函数的网页正文抽取算法代码实现
- 基于广告链接和行块分布的网页正文抽取
- 基于图的关键词抽取
- 基于VC的网页元素操作实现技术
- 与网页内容抽取相关的文献
- 支持AJAX的网页信息抽取方案
- 怎样抽取网页标记之间的正文
- 抽取网页数据的不同思路
- 基于行块分布函数的通用网页正文抽取:线性时间、不建DOM树、与HTML标签无关
- 基于GATE的信息抽取系统介绍
- 基于子树广度的Web信息抽取
- 项目验收文档模板(二)
- java.util.Date_与_java.sql.Date互转_及_字符串转换为日期时间格式
- 为什么我的Material Design风格列表点击时没有波纹扩散效果
- Android7.0适配的一些小心得
- C#导出数据到CSV和EXCEL文件,过长的数值被转义的解决方法
- 基于hadoop的网页元素抽取
- 17 - 03 - 30 图解HTTP(34)
- 计数问题
- spring集成quartz
- 清理Oracle 11g冗余用户和表空间
- Kubernetes1.6发布跟踪
- iOS最全性能优化(上)
- Cornerstore分支合并-二
- Android开发之多级下拉列表菜单实现(仿美团,淘宝等)