流量汇总案例编程,

public class FlowCountMapper extends Mapper<LongWritable,Text,Text,FlowBean>{
    public void map(LongWritable key, Text value, Context context)
            throws IOException,InterruptedException{
        //1、获取数据
        String line = value.toString();

        //2、切片
        String[] fields = line.split("\t");

        //3、封装对象,拿到关键字,数据清洗
        String phoneN = fields[1];
        long upFlow = long.parseLong(fields[fields.length-3]);
        long dfFlow = long.parseLong(fields[fields.length-2]);

        //4、输出到reduce端
        context.write(new Text(phoneN), new FlowBean(upFlow,dfFlow));
        }
}

public class FlowCountReducer extends Reducer<Text, FlowBean, Text, FlowBean>{
    pubic void reducer<Text key, Iterable<FlowBean> value, Context context>
            throws Exception{
        //1、相同手机号的流量使用两次汇总
        long upFlow_sum = 0;
        long dfFlow_sum = 0;

        //2、累加
        for(FlowBean f : value){
            upFlow_sum = f.getUpFlow();
            dfFlow_sum = f.getDfFlow();

        }

        FlowBean rs = new FlowBean(upFlow_sum, dfFlow_sum);

        //3、输出
        context.write(key,rs);
    }
}

public class FlowCountDriver{
    public static void main(String[] args){
        //1)获取job信息
        Configuration conf = new Configuration();
        Job job = Job.getInstance();

        //2)获取jar包
        job.setJarByClass(FlowCountDriver.class);

        //3)获取自定义的mapper和reducer类
        job.setMapperClass(FlowCountMapper.class);
        job.setReducerClass(FlowCountReducer.class);

        //4)设置map输出的数据类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(FlowBean.class);

        //5)设置reduce输出的数据类型
        job.setOutputkeyClass(Text.class);
        job.setOutputValueClass(FlowBean.class);

        //6)设置输入存在的路径与处理后的结果路径
        FileInputFormat.setInputPaths(job,new Path("/wc/in"));
        FileOutputFormat.setOutputPaths(job,new Path("/wc/out"));

        //7)提交任务
        boolean rs = job.waitForCompletion(true);
        System.out.println(rs?0:1);
    }
}

public class FlowBean implements Writable{

    private long upFlow;
    private long dfFlow;
    private long flowsum;

    pulibc FlowBean(){

    }
    public FlowBean(long upFlow, long dfFlow){
        this.upFlow = upFlow;
        this.dfFlow = dfFlow;
        this.flowsum = upFlow+dfFlow;
    }

    setter
    getter

    @Override
    public void readFields(DataInput in) throws Exception{
        //反序列化
        upFlow = in.readLong();
        dfFlow = in.readLong();
        flowsum = in.readLong();
    }
    @Override
    public void write(DataOutput out) throws Exception{
        //序列化
        out.writeLong(upFlow);
        out.writeLong(dfFlow);
        out.writeLong(flowsum);
    }

    @Override
    public String toString(){
        return upFlow+"\t"+dfFlow+"\t"+flowsum;
    }

}

 

WINCC是一款功能强大的可编程控制系统软件,在工业生产领域被广泛应用。在WINCC中,我们可以利用其内置的报表生成功能,方便地生成Excel报表,从而对生产数据进行汇总分析和可视化展示。 以一个化工生产过程为例,我们可以通过WINCC监控系统实时收集到各个工艺参数的数据,比如温度、压力、流量等。然后,通过WINCC的逻辑编程功能,我们可以对这些数据进行处理和计算,得到我们需要的汇总结果。 接着,利用WINCC内置的报表生成功能,我们可以将这些汇总结果以Excel报表的形式导出。通过WINCC的报表生成向导,我们可以选择需要展示的数据字段,添加统计分析图表,并设置报表的样式和格式。这样,我们就可以在生成的Excel报表中直观地看到各个工艺参数的趋势变化、异常情况等。 此外,WINCC还支持自定义报表模板功能。我们可以根据实际需求,设计符合自己工业生产过程的报表模板,在生成报表时直接应用该模板,从而使报表的表头、数据格式等更加符合实际需求。 通过WINCC做Excel报表,我们可以方便地对生产过程中的各项参数进行监控和分析,及时发现问题,追溯原因,提高生产效率和质量。同时,通过可视化的报表展示,生产管理人员可以更直观地了解生产过程中的变化趋势,及时作出调整和决策。 总而言之,WINCC作为一款强大的工控软件,其内置的报表生成功能使我们能够轻松地生成Excel报表,对工业生产过程中的数据进行汇总分析和可视化展示,对于提高生产效率和质量具有重要意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值