KeyValueTextInputFormat使用案例java
1.需求swift
统计输入文件中每一行的第一个单词相同的行数。微信
(1) 输入数据app
hadoop ni haoxiaoming hive helloworldhadoop ni haoxiaoming hive helloworld
(2) 指望结果数据ide
hadoop 2xiaoming 2
2.需求分析
oop
3.代码编写 大数据
(1) 编写Mapper类spa
public class KVTextMapper extends Mapper<Text, Text, Text, LongWritable>{
// 1 设置value LongWritable v = new LongWritable(1);
@Override protected void map(Text key, Text value, Context context) throws IOException, InterruptedException { // 2 写出 context.write(key, v); }}
(2) 编写Reducer类.net
public class KVTextReducer extends Reducer<Text, LongWritable, Text, LongWritable>{
LongWritable v = new LongWritable();
@Override protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
long sum = 0L;
// 1 汇总统计 for (LongWritable value : values) { sum += value.get(); } v.set(sum); // 2 输出 context.write(key, v); }}
(3) 编写Driver类code
public class KVTextDriver {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
Configuration conf = new Configuration(); // 设置切割符 conf.set(KeyValueLineRecordReader.KEY_VALUE_SEPERATOR, " "); // 1 获取job对象 Job job = Job.getInstance(conf);
// 2 设置jar包位置,关联mapper和reducer job.setJarByClass(KVTextDriver.class); job.setMapperClass(KVTextMapper.class);job.setReducerClass(KVTextReducer.class);
// 3 设置map输出kv类型 job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(LongWritable.class);
// 4 设置最终输出kv类型 job.setOutputKeyClass(Text.class);job.setOutputValueClass(LongWritable.class);
// 5 设置输入输出数据路径 FileInputFormat.setInputPaths(job, new Path(args[0]));
// 设置输入格式 job.setInputFormatClass(KeyValueTextInputFormat.class);
// 6 设置输出数据路径 FileOutputFormat.setOutputPath(job, new Path(args[1]));
// 7 提交job job.waitForCompletion(true); }}
关注「跟我一块儿学大数据」
跟我一块儿学大数据
本文分享自微信公众号 - 跟我一块儿学大数据(java_big_data)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。