我想启用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
您的行没有标签,因此不会返回包含多个项目的数组
value.toString().split("\t")
并且数组中的任何项都不会为null,只有一个空字符串
更改为分割逗号或在具有内置CSV阅读器的Spark中全部重写
无论哪种方法,建议您学习如何使用Junit