当前位置: 首页 > 知识库问答 >
问题:

流量中的流数据计算

扶文光
2023-03-14
var period = 3;
int [] inArr = {2, 4, 6, 7, 9, 11, 13, 16, 17, 18, 20, 22 };
var upbond = inArr[0] + period;
var count =0;
List<Integer> result = new ArrayList();
for(int a: inArr){
  if(a <= upbond){
    count++;
  }else{
    result.add(count);
    count = 1;
    upbond += period;
  }
}
result.add(count);
System.out.println(Arrays.toString(result.toArray()));

共有1个答案

马淳
2023-03-14

scan()变体允许您使用单独类型的累加器。

我将使用一个单独的state类来解决这个问题:

public class State {
    private int count;
    private Optional<Integer> upbond;
    private Optional<Integer> result;

    public State() {
        this.count = 0;
        this.upbond = Optional.empty();
        this.result = Optional.empty();
    }

    public State(int count, int upbond) {
        this.count = count;
        this.upbond = Optional.of(upbond);
        this.result = Optional.empty();
    }

    public State(int count, int upbond, int result) {
        this.count = count;
        this.upbond = Optional.of(upbond);
        this.result = Optional.of(result);
    }

    public int getCount() {
        return count;
    }

    public Optional<Integer> getUpbond() {
        return upbond;
    }

    public Optional<Integer> getResult() {
        return result;
    }
}

...然后使用scan()逐个元素构建状态:

sourceFlux
        .concatWithValues(0)
        .scan(new State(), (state, a) ->
                a <= state.getUpbond().orElse(a + period) ?
                        new State(state.getCount() + 1, state.getUpbond().orElse(a + period)) :
                        new State(1, state.getUpbond().orElse(a + period) + period, state.getCount())

        )
        .windowUntil(s -> s.getResult().isPresent())
        .flatMap(f -> f.reduce((s1, s2) -> s1.getResult().isPresent()?s1:s2).map(s -> s.getResult().orElse(s.getCount() - 1)))
 类似资料:
  • 基本统计 基本统计包含昨日消耗流量、昨日卡均流量、近7日卡均流量、本月已用总流量。 流量池统计 以可视化的图形形态,清晰直观的展示当前流量池的使用情况。多个流量池会依次显示。 流量最值情况 显示昨日流量使用最多、流量使用最少的情况。可以初步判定昨日用量是否有卡异常使用。并且可以针对异常的卡查看详情,详细排查问题,观测最近几天是否均出现异常情况。 流量使用情况 查询当前所有卡的流量消耗曲线、每日卡均

  • 我有一个现有的过程,我正试图转换成SCDF实现。目前的流程是, HTTP接收器(接收HTTP POST数据)->RabbitMQ->MQ接收器服务->处理/转换->DB接收器

  • 我想用Scala计算Flink中流数据的分位数。我的问题类似于但比这一个更简单,flink计算中位数。我认为这可以通过定义一个自定义聚合函数来实现,但我正在寻找一些Scala示例。我已经看了本章中的例子https://github.com/dataArtisans/flink-training-exercises但是没有完全找到我要找的东西。我计算了总和,平均值,我想计算第95个百分位数。 我希望

  • 1.通过该接口可以获取某视频某天的小时维度的流量信息。地址为: http://spark.bokecc.com/api/traffic/video/hourly 需要传递以下参数: 参数 说明 userid 用户 id,不可为空 videoid 视频 id,不可为空 date 查询日期,格式为yyyy-MM-dd,不可为空 返回数据traffics包含如下字段: 字段名 说明 traffic 流量

  • 1.通过该接口可以获取某用户某天的小时维度的流量信息。地址为: http://spark.bokecc.com/api/traffic/user/hourly 需要传递以下参数: 参数 说明 userid 用户id,不可为空 date 查询日期,格式为yyyy-MM-dd,不可为空 返回数据traffics包含如下字段: 字段名 说明 traffic 流量信息 traffic包含如下字段: 字段名

  • 当前里程碑(M4)文档显示了如何使用检索的示例: 我们如何使用WebClient将流式数据(从返回