java 数据聚合_GaussDB(DWS) DMS历史监控数据聚合算法java实现

GaussDB(DWS) DMS在性能监控时,有聚合数据的需求,JDK自带的SummaryStatistics类自带求和、最大值、最小值、平均值等聚合算法,要实现均值、方差、峰值、偏度等数据聚合方式,需要一个继承SummaryStatistics子类,并在子类中实现相关的算法。

代码示例如下:

import java.util.DoubleSummaryStatistics;

/**

* @Description: Double流统计算法

*/

public class AggregationDoubleStatistics extends DoubleSummaryStatistics {

private double m1;

private double m2;

private double m3;

private double m4;

@Override

public void accept(double x) {

super.accept(x);

long n = getCount();

//δ

double delta = x - m1;

//δ / n

double deltaN = delta / n;

//δ^2 / n

double delta2N = delta * deltaN;

//δ^2 / n^2

double delta2N2 = deltaN * deltaN;

//δ^3 / n^2

double delta3N2 = delta2N * deltaN;

//δ^4 / n^3

double delta4N3 = delta3N2 * deltaN;

m4 += (n - 1) * (n * n - 3 * n + 3) * delta4N3

+ 6 * m2 * delta2N2

- 4 * m3 * deltaN;

m3 += (n - 1) * (n - 2) * delta3N2

- 3 * m2 * deltaN;

m2 += (n - 1) * delta2N;

m1 += deltaN;

}

@Override

public void combine(DoubleSummaryStatistics other) {

throw new UnsupportedOperationException(

"Can't combine a standard DoubleSummaryStatistics with this class");

}

public void combine(MoreDoubleStatistics other) {

MoreDoubleStatistics s1 = this;

MoreDoubleStatistics s2 = other;

long n1 = s1.n();

long n2 = s2.n();

long n = n1 + n2;

//δ

double delta = s2.m1 - s1.m1;

//δ / n

double deltaN = delta / n;

//δ^2 / n

double delta2N = delta * deltaN;

//δ^2 / n^2

double delta2N2 = deltaN * deltaN;

//δ^3 / n^2

double delta3N2 = delta2N * deltaN;

//δ^4 / n^3

double delta4N3 = delta3N2 * deltaN;

this.m4 = s1.m4 + s2.m4 + n1 * n2 * (n1 * n1 - n1 * n2 + n2 * n2) * delta4N3

+ 6.0 * (n1 * n1 * s2.m2 + n2 * n2 * s1.m2) * delta2N2

+ 4.0 * (n1 * s2.m3 - n2 * s1.m3) * deltaN;

this.m3 = s1.m3 + s2.m3 + n1 * n2 * (n1 - n2) * delta3N2

+ 3.0 * (n1 * s2.m2 - n2 * s1.m2) * deltaN;

this.m2 = s1.m2 + s2.m2 + n1 * n2 * delta2N;

this.m1 = s1.m1 + n2 * delta;

super.combine(other);

}

private long n() {

return getCount();

}

/**

* 计算流的方差

* @return

*/

public double getVariance() {

return n() <= 1 ? 0 : m2 / (n() - 1);

}

/**

* 计算流的标准差

* @return

*/

public double getStdDev() {

return Math.sqrt(getVariance());

}

/**

* 计算流的偏度

* @return

*/

public double getSkewness() {

return m2 == 0 ? 0 : Math.sqrt(n()) * m3 / Math.pow(m2, 1.5);

}

/**

* 计算流的峰度

* @return

*/

public double getKurtosis() {

return m2 == 0 ? 0 : n() * m4 / (m2 * m2) - 3.0;

}

}

使用示例:

private void getAggregatedData(List list) {

MoreDoubleStatistics doubleStatistics = list

.stream()

.mapToDouble(t -> t)

.collect(MoreDoubleStatistics::new, MoreDoubleStatistics::accept, MoreDoubleStatistics::combine);

double maxAggregatedData = doubleStatistics.getMax();

double minAggregatedData = doubleStatistics.getMin();

double avgAggregatedData = doubleStatistics.getAverage();

double sumAggregatedData = doubleStatistics.getSum();

double varAggregatedData = doubleStatistics.getVariance();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#!/bin/bash day1=$(date +%Y%m%d) day2=$(date -d "yesterday" +%Y%m%d) cd /ftpdata/receive/eda_in/in_1851 gunzip *.gz mv 10000_ACCOUNT_BASE_DB_${day1}_${day2}_D_00_0001.DAT /data/gbase/impdata/dws_db/dws_db_dws_in_1851_account_base.dat mv 10000_ACCOUNT_MANAGER_DB_${day1}_${day2}_D_00_0001.DAT /data/gbase/impdata/dws_db/dws_db_dws_in_1851_account_manager.dat mv 10000_CONSOLE_USER_DB_${day1}_${day2}_D_00_0001.DAT /data/gbase/impdata/dws_db/dws_db_dws_in_1851_console_user.dat mv 10000_REPORT_CRM_MASTER_ORDER_CONFIG_DB_${day1}_${day2}_D_00_0001.DAT /data/gbase/impdata/dws_db/dws_db_dws_in_1851_report_crm_master_order_config.dat mv 10000_INNER_ORDER_ITEM_DB_${day1}_${day2}_D_00_0001.DAT /data/gbase/impdata/dws_db/dws_db_dws_in_1851_inner_order_item.dat mv 10000_REPORT_RESOURCE_SCORE_DB_${day1}_${day2}_D_00_0001.DAT /data/gbase/impdata/dws_db/dws_db_dws_in_1851_report_resource_score.dat mv 10000_REPORT_PAYMENT_PLAN_PREVIEW_DB_${day1}_${day2}_D_00_0001.DAT /data/gbase/impdata/dws_db/dws_db_dws_in_1851_report_payment_plan_preview.dat mv 10000_ORDERS_ITEM_DEVELOPMENT_DETAIL_DB_${day1}_${day2}_D_00_0001.DAT /data/gbase/impdata/dws_db/dws_db_dws_in_1851_orders_item_development_detail.dat mv 10000_REPORT_ONE_CORD_ONE_PERSON_MANAGER_LIST_DB_${day1}_${day2}_D_00_0001.DAT /data/gbase/impdata/dws_db/dws_db_dws_in_1851_1code1person_manager_list.dat mv 10000_CLOUD_DB_${day1}_${day2}_D_00_0001.DAT /data/gbase/impdata/dws_db/dws_db_dws_in_1851_cloud.dat mv 10000_REPORT_OPOE_CUSTOMER_DB_${day1}_${day2}_D_00_0001.DAT /data/gbase/impdata/dws_db/dws_db_dws_in_1851_report_opoe_customer.dat mv 10000_CLOUD_ACTIVE_DB_${day1}_${day2}_D_00_0001.DAT /data/gbase/impdata/dws_db/dws_db_dws_in_1851_Cloud_active.dat mv 10000_BUSI_ORDER_DB_${day1}_${day2}_D_00_0001.DAT /data/gbase/impdata/dws_db/dws_db_dws_in_1851_busi_order.dat mv 10000_BUSI_ORDER_ITEM_DB_${day1}_${day2}_D_00_0001.DAT /data/gbase/impdata/dws_db/dws_db_dws_in_1851_busi_order_item.dat mv 10000_REPORT_IAM_IDENTITY_DB_${day1}_${day2}_D_00_0001.DAT /data/gbase/impdata/dws_db/dws_db_dws_in_1851_iam_identity.dat exit 0 什么意思
07-14

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值