JavaSE FAQs

1.Iterator迭代器:Iterator迭代器中只有一个对象,遍历迭代器返回的只有一个对象,遍历的都是一个对象,只是属性值不一样。

public class MyIterator implements Iterator<DDTaxi> {
    static BufferedReader br;
    static {
        try {
            br = new BufferedReader(new FileReader("D:\\IDEA_workspace\\demo1_db\\hadoopdemo1\\src\\main\\data\\ddtaxi\\line.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    /**
     * 如果hasNext返回true才会调用next方法获取数据
     *
     * @return
     */
    String line;
    @Override
    public boolean hasNext() {
        try {
            line = br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return line==null?false:true;
    }
    /**
     * 使用一个对象就可以接受所有的数据
     */
    DDTaxi d = new DDTaxi();
    @Override
    public DDTaxi next() {
        //处理行数据
        String[] split = line.split(",");
        String startTime = split[0];
        String endTime = split[1];
        d.setEndTime(endTime);
        d.setStartTime(startTime);
        return d;
    }
}
public class Test {
    public static void main(String[] args) {
        MyIterator myIterator = new MyIterator();
        List<DDTaxi> list = new ArrayList<>();
        while (myIterator.hasNext()) {
            DDTaxi dd = myIterator.next();
            list.add(dd);
        }
        System.out.println(list);
    }
}
public class DDTaxi {
    private String startTime;
    private String endTime;

    @Override
    public String toString() {
        return "DDTaxi{" +
                "startTime='" + startTime + '\'' +
                ", endTime='" + endTime + '\'' +
                '}';
    }

    public String getStartTime() {
        return startTime;
    }

    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }

    public String getEndTime() {
        return endTime;
    }

    public void setEndTime(String endTime) {
        this.endTime = endTime;
    }

    public DDTaxi(String startTime, String endTime) {
        this.startTime = startTime;
        this.endTime = endTime;
    }

    public DDTaxi() {
    }
}

2.包装类型值为null转为对应的基本数据类型报空指针异常,注意包装类型和对应的基本数据的转换问题。
在这里插入图片描述
3.为什么内部类一定要加static修饰,mr程序的才能正常运行?

/* @Description: 对Skew1进行二次Mr程序
 * a-0 880 a-1 850-->a 1730
 */
public class Skew2 {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        skew2Start();
    }

    public static void skew2Start() throws IOException, ClassNotFoundException, InterruptedException {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, Skew2.class.getSimpleName());
        job.setMapperClass(Skew2Mapper.class);
        job.setReducerClass(Skew2Reducer.class);

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

//        job.setNumReduceTasks(2);
        FileInputFormat.setInputPaths(job, new Path("D:\\IDEA_workspace\\demo1_db\\hadoopdemo1\\src\\main\\data\\skewoutput1"));
        FileOutputFormat.setOutputPath(job, new Path("D:\\IDEA_workspace\\demo1_db\\hadoopdemo1\\src\\main\\data\\skewoutput2"));
        boolean b = job.waitForCompletion(true);
        System.exit(b?0:-1);
    }

     class Skew2Mapper extends Mapper<LongWritable, Text, Text, IntWritable> {
        Text k = new Text();
        IntWritable v = new IntWritable();
        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            String line = value.toString();
            String[] split = line.split("-");
            String word = split[0];
            k.set(word);
            String[] split1 = split[1].split("\\s+");
            int count = Integer.parseInt(split1[1]);
            v.set(count);
            context.write(k,v);
        }
    }

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

2020-09-25 19:42:37,343 WARN [org.apache.hadoop.mapred.LocalJobRunner] - job_local516756027_0001
java.lang.Exception: java.lang.RuntimeException: java.lang.NoSuchMethodException: com.jiubx.hadoop.skew.Skew2$Skew2Mapper.<init>()
	at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:492)
	at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:552)
Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException: com.jiubx.hadoop.skew.Skew2$Skew2Mapper.<init>()
	at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:135)
	at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:759)
	at org.apache.hadoop.mapred.MapTask.run(MapTask.java:347)
	at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:271)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoSuchMethodException: com.jiubx.hadoop.skew.Skew2$Skew2Mapper.<init>()
	at java.lang.Class.getConstructor0(Class.java:3082)
	at java.lang.Class.getDeclaredConstructor(Class.java:2178)
	at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:129)
	... 8 more
2020-09-25 19:42:38,196 INFO [org.apache.hadoop.mapreduce.Job] - Job job_local516756027_0001 running in uber mode : false
2020-09-25 19:42:38,206 INFO [org.apache.hadoop.mapreduce.Job] -  map 0% reduce 0%
2020-09-25 19:42:38,209 INFO [org.apache.hadoop.mapreduce.Job] - Job job_local516756027_0001 failed with state FAILED due to: NA
2020-09-25 19:42:38,225 INFO [org.apache.hadoop.mapreduce.Job] - Counters: 0

外部类访问成员内部类信息,需通过内部类实例,无法直接访问。静态内部类对象可不依赖于外部类对象,直接创建。
4.异常总结?

抛出运行时异常能通过编译。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值