import java.io.*;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.*;
import org.apache.hadoop.mapreduce.lib.input.*;
import org.apache.hadoop.mapreduce.lib.output.*;
public class Main {
public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> {
public void map(LongWritable key, Text value, Context c) throws IOException, InterruptedException {
String line = value.toString();
if(line.split(" ").length > 5)
c
.write(new Text
("count"
), new IntWritable
(1)); }
}
public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterable<IntWritable> v, Context c) throws IOException, InterruptedException {
int sum = 0;
for(IntWritable x : v) sum += x.get();
c
.write(key
, new IntWritable
(sum
)); }
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "job");
job.setJarByClass(Main.class);
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System
.exit
(job
.waitForCompletion
(true) ?
0 : 1); }
}
aW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IG9yZy5hcGFjaGUuaGFkb29wLmNvbmYuKjsKaW1wb3J0IG9yZy5hcGFjaGUuaGFkb29wLmZzLlBhdGg7CmltcG9ydCBvcmcuYXBhY2hlLmhhZG9vcC5pby4qOwppbXBvcnQgb3JnLmFwYWNoZS5oYWRvb3AubWFwcmVkdWNlLio7CmltcG9ydCBvcmcuYXBhY2hlLmhhZG9vcC5tYXByZWR1Y2UubGliLmlucHV0Lio7CmltcG9ydCBvcmcuYXBhY2hlLmhhZG9vcC5tYXByZWR1Y2UubGliLm91dHB1dC4qOwoKcHVibGljIGNsYXNzIE1haW4gewoKICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTWFwIGV4dGVuZHMgTWFwcGVyPExvbmdXcml0YWJsZSwgVGV4dCwgVGV4dCwgSW50V3JpdGFibGU+IHsKICAgICAgICBwdWJsaWMgdm9pZCBtYXAoTG9uZ1dyaXRhYmxlIGtleSwgVGV4dCB2YWx1ZSwgQ29udGV4dCBjKSB0aHJvd3MgSU9FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSB2YWx1ZS50b1N0cmluZygpOwoJCQlpZihsaW5lLnNwbGl0KCIgIikubGVuZ3RoID4gNSkKICAgIAkJCWMud3JpdGUobmV3IFRleHQoImNvdW50IiksIG5ldyBJbnRXcml0YWJsZSgxKSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUmVkdWNlIGV4dGVuZHMgUmVkdWNlcjxUZXh0LCBJbnRXcml0YWJsZSwgVGV4dCwgSW50V3JpdGFibGU+IHsKICAgICAgICBwdWJsaWMgdm9pZCByZWR1Y2UoVGV4dCBrZXksIEl0ZXJhYmxlPEludFdyaXRhYmxlPiB2LCBDb250ZXh0IGMpIHRocm93cyBJT0V4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewogICAgICAgICAgICBpbnQgc3VtID0gMDsKCQkJZm9yKEludFdyaXRhYmxlIHggOiB2KSBzdW0gKz0geC5nZXQoKTsKCQkJYy53cml0ZShrZXksIG5ldyBJbnRXcml0YWJsZShzdW0pKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgQ29uZmlndXJhdGlvbiBjb25mID0gbmV3IENvbmZpZ3VyYXRpb24oKTsKICAgICAgICBKb2Igam9iID0gSm9iLmdldEluc3RhbmNlKGNvbmYsICJqb2IiKTsKCiAgICAgICAgam9iLnNldEphckJ5Q2xhc3MoTWFpbi5jbGFzcyk7CiAgICAgICAgam9iLnNldE1hcHBlckNsYXNzKE1hcC5jbGFzcyk7CiAgICAgICAgam9iLnNldFJlZHVjZXJDbGFzcyhSZWR1Y2UuY2xhc3MpOwoKICAgICAgICBqb2Iuc2V0T3V0cHV0S2V5Q2xhc3MoVGV4dC5jbGFzcyk7CiAgICAgICAgam9iLnNldE91dHB1dFZhbHVlQ2xhc3MoSW50V3JpdGFibGUuY2xhc3MpOwoKICAgICAgICBGaWxlSW5wdXRGb3JtYXQuYWRkSW5wdXRQYXRoKGpvYiwgbmV3IFBhdGgoYXJnc1swXSkpOwogICAgICAgIEZpbGVPdXRwdXRGb3JtYXQuc2V0T3V0cHV0UGF0aChqb2IsIG5ldyBQYXRoKGFyZ3NbMV0pKTsKCiAgICAgICAgU3lzdGVtLmV4aXQoam9iLndhaXRGb3JDb21wbGV0aW9uKHRydWUpID8gMCA6IDEpOwogICAgfQp9