MapReduce处理公共自行车数据

利用Hadoop平台处理公共自行车数据,数据Excel表如下:
MapReduce处理公共自行车数据_第1张图片

Excel表中有一列duration表示自行车使用时间,利用MapReduce统计自行车使用时间为60s,120,180s以此类推的使用量。

代码如下:

Map端:

package com.tyut.rcr;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class Map extends Mapper<LongWritable, Text, Text, IntWritable> {
    private static final IntWritable one = new IntWritable(1);

    protected void map(LongWritable key, Text value,
            org.apache.hadoop.mapreduce.Mapper.Context context)
            throws java.io.IOException, InterruptedException {
                    String line = value.toString();
                    String[] datas= line.split(",");
                    String during=datas[0];
                    int dur = Integer.parseInt(during);
                    if(dur<60){
                        String str = "自行车使用时间<60s次数:  "+dur;
                        context.write(new Text(str),one);
                    }
                    else {
                        for(int i=1;i<2000;i++){
                            if (dur>=(i*60)&&dur<(i+1)*60){
                                String str = "自行车使用时间"+(i*60)+"s到"+(i+1)*60+"s之间次数:  ";
                                context.write(new Text(str),one);
                            }
                            else if(dur>=(2000*60)) {
                                String str = "自行车使用时间大于120000s的次数:  ";
                                context.write(new Text(str),one);
                                break;
                            }
                        }
                    }
    };
}

Reduce端:

package com.tyut.rcr;

import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> {
    @Override
    protected void reduce(Text key, Iterable values,
            Reducer.Context context) throws IOException, InterruptedException {
                            int sum = 0;
                            for ( IntWritable val : values){
                                sum+=val.get();
                            }
                            context.write(key, new IntWritable(sum));
    }
}

driver端:

package com.tyut.rcr;

import java.io.IOException;
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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

public class Time {

    public static void main(String[] args) throws Exception, IOException {
        Configuration conf = new Configuration();

        @SuppressWarnings("deprecation")
        Job job = new Job (conf,"Time");

        job.setJarByClass(Time.class);

        job.setMapperClass(Map.class);
        job.setReducerClass(Reduce.class);

        job.setInputFormatClass(TextInputFormat.class);
        job.setOutputFormatClass(TextOutputFormat.class);

        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        job.waitForCompletion(true);
    }
}

将上述代码打包为.jar包提交给集群运行,结果如下:
自行车使用时间1020s到1080s的次数: 2225
自行车使用时间1080s到1140s的次数: 1764
自行车使用时间1140s到1200s的次数: 1491
自行车使用时间1200s到1260s的次数: 1222
自行车使用时间120s到180s之间次数: 3613
自行车使用时间1260s到1320s的次数: 1111
自行车使用时间1320s到1380s的次数: 1008
自行车使用时间1380s到1440s的次数: 847
自行车使用时间1440s到1500s的次数: 798
自行车使用时间1500s到1560s的次数: 676
自行车使用时间1560s到1620s的次数: 623
自行车使用时间1620s到1680s的次数: 553
自行车使用时间1680s到1740s的次数: 433
自行车使用时间1740s到1800s的次数: 367
自行车使用时间1800s到1860s的次数: 360
自行车使用时间180s到240s之间次数: 9291
自行车使用时间1860s到1920s的次数: 274
自行车使用时间1920s到1980s的次数: 251
自行车使用时间1980s到2040s的次数: 187
自行车使用时间2040s到2100s的次数: 179
自行车使用时间2100s到2160s的次数: 155
自行车使用时间2160s到2220s的次数: 147
自行车使用时间2200s到2280s的次数: 138
自行车使用时间2280s到2340s的次数: 128
自行车使用时间2340s到2400s的次数: 114
自行车使用时间2400s到2460s的次数: 125
自行车使用时间240s到300之间次数: 11902
自行车使用时间2460s到2520s的次数: 118
自行车使用时间2520s到2580s的次数: 104
自行车使用时间2580s到2640s的次数: 79
自行车使用时间300s到360s之间次数: 12339
自行车使用时间360s到420s之间次数: 12447
自行车使用时间420s到480s之间次数: 11749
自行车使用时间480s到540s之间次数: 11122
自行车使用时间540s到600s之间次数: 10093
自行车使用时间600s到660s之间次数: 9029
自行车使用时间60s到120s之间次数: 1115
自行车使用时间660s到720s之间次数: 7570
自行车使用时间720s到780s之间次数: 6176
自行车使用时间780s到840s之间次数: 4904
自行车使用时间840s到900s之间次数: 4112
自行车使用时间900s到960s之间次数: 3369
自行车使用时间960s到1020s的次数: 2774
自行车使用时间大于2700s的次数: 6838

你可能感兴趣的:(大数据)