大数据hadoop练习___出租车MRWordCount案例

WordCountDemo

计算出10月1日这天每小时的载客量

JobMain

package input.mapreduceT1;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class JobMain  {
    //该方法用于指定一个job任务
    public static void main(String[] args) throws Exception {
        Job job = Job.getInstance(new Configuration(), "taxi");

        //设置驱动方法
       job.setJarByClass(JobMain.class);

        //设置map,reduce
        job.setMapperClass(WordCountMapper.class);
        job.setReducerClass(WordCountReducer.class);

        //设置map
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(Text.class);

        //设置reduce
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);

        //输入输出路径
        FileInputFormat.addInputPath(job,new Path("F:\\Personal\\Desktop\\day05\\代码\\day05_mapreduce\\src\\main\\java\\租车\\1.txt"));
        FileOutputFormat.setOutputPath(job,new Path("F:\\Personal\\Desktop\\day05\\代码\\day05_mapreduce\\src\\main\\java\\output\\Test1.5"));

        boolean b = job.waitForCompletion(true);
        System.exit(b?0:1);
    }
}

WordCountMapper

package input.mapreduceT1;



import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;

/*
  四个泛型解释:
    KEYIN :K1的类型
    VALUEIN: V1的类型

    KEYOUT: K2的类型
    VALUEOUT: V2的类型
 */
public class WordCountMapper  extends Mapper<LongWritable, Text,Text,Text>{
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //214704,4,2,20121001081102,116.5546341,39.9706421,0,128,1
        //车机标识,触发事件,运营状态,GPS时间,GPS经度,GPS纬度,GPS速度,GPS方向,GPS状态
        String[] split = value.toString().split(",");
        if (split.length >= 4){
            //上车
            if ("1".equals(split[1])){
                //10月1日
                String date = split[3].substring(0, 10);
                //判断GPS是否有效
                if (split[8].equals("1")){
                    if (date.substring(0, 8).endsWith("1001")){
                        //key是车牌号+每小时
                        context.write(new Text(date.substring(8,10)),value);                    }
                }

            }
        }
        //key GPS时间_车机标识 value 1
    }
}


WordCountReducer

package input.mapreduceT1;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
/*
  四个泛型解释:
    KEYIN:  K2类型
    VALULEIN: V2类型

    KEYOUT: K3类型
    VALUEOUT:V3类型
 */

public class WordCountReducer extends Reducer<Text,Text,Text,Text>{
    @Override
    protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
        /**
         * 载客量
         */
        int CarryingCapacity=0;
        HashMap<String, ArrayList<String>> map = new HashMap<>();
        ArrayList<String> list = new ArrayList<>();
        for (Text value : values) {
            String[] split = value.toString().split(",");
            if (split[2].equals("1")){
                CarryingCapacity++;
            }

        }

        context.write(key,new Text(CarryingCapacity+""));
        //每小时每个车载客量
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIMaynor

觉得有用,要个免费的三连可有?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值