map处理数据在hadoop中可能为空

问题描述 投票:0回答:1

我想启用IPFlow统计信息

[第一列是序列号,第二是电话号码,第三是上流数据,第四是下流数据。我想运行一个结合了上流的mapreduce程序,添加下流数据。如果数据不为null,我可以将其耗尽成功。

  1,1120487,10,20
  2,1120417,20,30
  3,1120427,30,40
  4,1120437,,50
    public class FlowMapper extends Mapper<LongWritable, Text, IntWritable,FlowBean> {
        IntWritable phone = new IntWritable();
        FlowBean flowbean= new FlowBean();
        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            int arg1;
            int arg2;
            String[] arr = value.toString().split("\t");
            phone.set(Integer.parseInt(arr[1]));
    //        System.out.println(Arrays.toString(arr));
    //        if(!Character.isDigit(Integer.parseInt(arr[2]))){
    //            arg1 = 0;
    //            System.out.println("come in ");
    //        }else{
    //            arg1 =Integer.parseInt(arr[2]);
    //            System.out.println("is this in your think");
    //        }
    //        if(arr[3] == null){
    //            arg2 = 0;
    //        }else{
    //            arg2 =Integer.parseInt(arr[3]);
    //        }
    //        System.out.println(arg1);
    //        System.out.println(arg2);
            arg1 =Integer.parseInt(arr[2]);
            arg2 =Integer.parseInt(arr[3]);
            flowbean.set(arg1, arg2);
            context.write(phone,flowbean);
        }
   } 

您可以看到,我在注释部分中尝试过,但是失败了。当数据为时,我想给数字0

java hadoop mapreduce
1个回答
0
投票

您的行没有标签,因此不会返回包含多个项目的数组

value.toString().split("\t")

并且数组中的任何项都不会为null,只有一个空字符串


更改为分割逗号或在具有内置CSV阅读器的Spark中全部重写

无论哪种方法,建议您学习如何使用Junit

© www.soinside.com 2019 - 2024. All rights reserved.