spark自定义累加器
来源:互联网 发布:美容院微管理软件 编辑:程序博客网 时间:2024/05/17 04:29
package com.bjsxt.spark.skynet;
import org.apache.spark.AccumulatorParam;
import com.bjsxt.spark.constant.Constants;
import com.bjsxt.spark.util.StringUtils;
public class MonitorAndCameraStateAccumulator implements AccumulatorParam<String> {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public String addInPlace(String v1, String v2) {
return add(v1, v2);
}
/**
* 初始化的值
*/
@Override
public String zero(String v1) {
return Constants.FIELD_NORMAL_MONITOR_COUNT+"=0|"
+ Constants.FIELD_NORMAL_CAMERA_COUNT+"=0|"
+ Constants.FIELD_ABNORMAL_MONITOR_COUNT+"=0|"
+ Constants.FIELD_ABNORMAL_CAMERA_COUNT+"=0|"
+ Constants.FIELD_ABNORMAL_MONITOR_CAMERA_INFOS+"= ";
}
@Override
public String addAccumulator(String v1, String v2) {
return add(v1, v2);
}
/**
* @param v1 连接串,上次累加后的结果
* @param v2 本次累加传入的值
* @return 更新以后的连接串
*
* Constants.FIELD_ABNORMAL_MONITOR_COUNT +"=1|
* Constants.FIELD_ABNORMAL_CAMERA_COUNT+"="+abnoramlCameraCount+"|"
* Constants.FIELD_ABNORMAL_MONITOR_CAMERA_INFOS+"="+monitorId+":"+standardCameraIds
*/
private String add(String v1, String v2) {
if(StringUtils.isEmpty(v1)){
return v2;
}
String[] valArr = v2.split("\\|");
for (String string : valArr) {
String[] fieldAndValArr = string.split("=",2);
String field = fieldAndValArr[0];
String value = fieldAndValArr[1];
String oldVal = StringUtils.getFieldFromConcatString(v1, "\\|", field);
if(oldVal != null){
if(Constants.FIELD_ABNORMAL_MONITOR_CAMERA_INFOS.equals(field)){
v1 = StringUtils.setFieldInConcatString(v1, "\\|", field, oldVal + "~" + value);
}else{
int newVal = Integer.parseInt(oldVal)+Integer.parseInt(value);
v1 = StringUtils.setFieldInConcatString(v1, "\\|", field, String.valueOf(newVal));
}
}
}
return v1;
}
}
import org.apache.spark.AccumulatorParam;
import com.bjsxt.spark.constant.Constants;
import com.bjsxt.spark.util.StringUtils;
public class MonitorAndCameraStateAccumulator implements AccumulatorParam<String> {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public String addInPlace(String v1, String v2) {
return add(v1, v2);
}
/**
* 初始化的值
*/
@Override
public String zero(String v1) {
return Constants.FIELD_NORMAL_MONITOR_COUNT+"=0|"
+ Constants.FIELD_NORMAL_CAMERA_COUNT+"=0|"
+ Constants.FIELD_ABNORMAL_MONITOR_COUNT+"=0|"
+ Constants.FIELD_ABNORMAL_CAMERA_COUNT+"=0|"
+ Constants.FIELD_ABNORMAL_MONITOR_CAMERA_INFOS+"= ";
}
@Override
public String addAccumulator(String v1, String v2) {
return add(v1, v2);
}
/**
* @param v1 连接串,上次累加后的结果
* @param v2 本次累加传入的值
* @return 更新以后的连接串
*
* Constants.FIELD_ABNORMAL_MONITOR_COUNT +"=1|
* Constants.FIELD_ABNORMAL_CAMERA_COUNT+"="+abnoramlCameraCount+"|"
* Constants.FIELD_ABNORMAL_MONITOR_CAMERA_INFOS+"="+monitorId+":"+standardCameraIds
*/
private String add(String v1, String v2) {
if(StringUtils.isEmpty(v1)){
return v2;
}
String[] valArr = v2.split("\\|");
for (String string : valArr) {
String[] fieldAndValArr = string.split("=",2);
String field = fieldAndValArr[0];
String value = fieldAndValArr[1];
String oldVal = StringUtils.getFieldFromConcatString(v1, "\\|", field);
if(oldVal != null){
if(Constants.FIELD_ABNORMAL_MONITOR_CAMERA_INFOS.equals(field)){
v1 = StringUtils.setFieldInConcatString(v1, "\\|", field, oldVal + "~" + value);
}else{
int newVal = Integer.parseInt(oldVal)+Integer.parseInt(value);
v1 = StringUtils.setFieldInConcatString(v1, "\\|", field, String.valueOf(newVal));
}
}
}
return v1;
}
}
阅读全文
0 0
- spark自定义累加器
- Spark自定义累加器
- Spark自定义累加器的实现
- Spark累加器
- Spark 2.x 自定义累加器AccumulatorV2的使用
- Spark累加器使用
- Spark广播和累加器
- spark广播,累加器
- spark广播变量和累加器
- Learning Spark笔记12-累加器
- spark广播变量和累加器
- 累加器
- Spark累加器(Accumulator)陷阱及解决办法
- Spark的广播和累加器的使用
- Spark源码解读(8)——累加器
- Spark累加器(Accumulator)陷阱及解决办法
- spark中的广播变量和累加器
- Spark累加器(Accumulator)陷阱及解决办法
- 线程同步 synchronized关键字使用
- accounting assistant
- nullptr关键字
- hdu5692 Snacks(线段树+dfs序)
- js所能表示的最大整数的问题
- spark自定义累加器
- ODBC
- HTML中的标签系列-03-DIV标签&CSS
- HTTP与HTTPS的区别
- 第三周第一课
- 【计蒜客】X的平方根
- LeetCode 算法习题 第四周
- 转载:数据库相关中间件
- 搭建Hadoop集群