我是靠谱客的博主 生动红牛,这篇文章主要介绍重读avro文件 对文件进行简单的mr计算,现在分享给大家,希望可以做个参考。

public class ReadAvroInput {

public static class ReadAvroInputMap extends Mapper<AvroKey<UserActionLog>, NullWritable, Text, IntWritable> {

    private Text oKey = new Text();
    private final IntWritable ONE = new IntWritable(1);
    private UserActionLog keyData;

    @Override
    protected void map(AvroKey<UserActionLog> key, NullWritable value,
            Mapper<AvroKey<UserActionLog>, NullWritable, Text, IntWritable>.Context context)
            throws IOException, InterruptedException {
        keyData = key.datum();
        oKey.set(keyData.getProvience().toString());
        context.write(oKey, ONE);
    }
}

public static class ReadAvroInputReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    private int sum;
    private IntWritable oValue = new IntWritable();

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values,
            Reducer<Text, IntWritable, Text, IntWritable>.Context context)
            throws IOException, InterruptedException {
        sum=0;
        for (IntWritable value : values) {
            sum += value.get();
        }
        oValue.set(sum);
        context.write(key, oValue);

    }
}

public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
    Configuration configuration =new Configuration();
    Job job =Job.getInstance(configuration);
    job.setJarByClass(ReadAvroInput.class);
    job.setJobName("重读avro文件进行mr计算");
    
    job.setMapperClass(ReadAvroInputMap.class);
    job.setCombinerClass(ReadAvroInputReducer.class);
    job.setReducerClass(ReadAvroInputReducer.class);
    
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    
    job.setInputFormatClass(AvroKeyInputFormat.class);
    AvroJob.setInputKeySchema(job, UserActionLog.getClassSchema());
    
    FileInputFormat.addInputPath(job, new Path("/ReducerJoin/part-r-00000.avro"));
    Path outputPath =new Path("/ReadAvroInput");
    outputPath.getFileSystem(configuration).delete(outputPath, true);
    FileOutputFormat.setOutputPath(job, outputPath);
    System.exit(job.waitForCompletion(true)?0:1);
}

}

UserActionLog是通过mvn 指令通过schema框架生成的

最后

以上就是生动红牛最近收集整理的关于重读avro文件 对文件进行简单的mr计算的全部内容,更多相关重读avro文件内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部