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

Apache Flink:我可以获得窗口函数中键字段的名称吗?

咸皓
2023-03-14

我有一个数据流,有不同的字段,我想通过键来进行聚合计算(计数、平均、..)

stream.keyBy("field1").window().aggregate(AggFunc, WindowFunc)...

stream.keyBy("field2").window().aggregate(AggFunc, WindowFunc)...

stream.keyBy("field3").window().aggregate(AggFunc, WindowFunc)...

-字段1上键控的流

("field1", "field1-val1", 3, window1)
("field1", "field1-val2", 5, window1)

-字段2上键控的流

("field2", "field2-val1", 6, window1)
("field2", "field2-val2", 7, window1)

共有1个答案

楚煜
2023-03-14

不,windowfunction不允许访问键字段的名称。但是,您可以向windowfunction的构造函数添加一个参数,并在那里传递字段名。

这将与下面的示例类似

// define window function

public static class MyWindowFunc implements WindowFunction<...> { 
    private final String keyname;

    public MyWindowFunc(String keyname) {
        this.keyname = keyname;
    }    

  ...
}

// use window function

stream.keyBy("field1").window().aggregate(AggFunc, new MyWindowFunc("field1"))...
stream.keyBy("field2").window().aggregate(AggFunc, new MyWindowFunc("field2"))...
stream.keyBy("field3").window().aggregate(AggFunc, new MyWindowFunc("field3"))...
 类似资料:
  • 我有以下代码来计算socketTextStream中的单词。累积字数和时间窗字数都是必需的。该程序存在累积计数始终与窗口计数相同的问题。为什么会出现这个问题?根据加窗计数计算累积计数的正确方法是什么?

  • 在中,元素被分配给一个或多个实例。在滑动事件时间窗口的情况下,这发生在1中。 如果窗口的和,则将时间戳为0的元素分配到以下窗口: 窗口(开始=0,结束=5) 窗口(开始=-1,结束=4) 窗口(开始=-2,结束=3) 窗口(开始=-3,结束=2) 窗口(开始=-4,结束=1) 在一幅图片中: 有没有办法告诉Flink时间有开始,而在那之前,没有窗户?如果没有,从哪里开始寻求改变?在上述情况下,Fl

  • 问题内容: 是否有可能做到这一点: 我的堆栈中有Dojo和jQuery框架,因此,如果这两个框架都使它变得更容易,它们将可用。 问题答案: 在ES5及更高版本中,无法访问该信息。 在旧版JS中,您可以使用来获得它。 但是,您可能必须解析名称,因为它可能包括一些额外的垃圾。不过,在某些实现中,您可以使用来简单地获取名称。 解析:

  • 问题内容: 我希望这个问题不是太简单,但是我不知道:( 如何在函数名称中使用var启动函数? 例如 … 我的职能 启动功能 我希望有人能帮助我。 提前致谢!彼得 问题答案: 将函数存储在一个对象中,而不是使其成为顶层。 然后,您可以像访问其他任何对象一样访问它们: 您也可以直接从对象访问它们… ……并避免将它们存储在一个对象中,但这意味着应该在全局范围内进行播放。

  • 问题内容: 基本上,我想设置一个使用“ for”作为参数以提高可读性的函数。 我设置了类似的内容,但是当我尝试将开关用于“ for”时,它将作为关键字出现并引发编译错误。 干杯 问题答案: 使用关键字作为普通标识符时,您必须使用反引号`对此进行转义

  • 我有一个相当简单的管道(代码比文字更好): 我的问题是,对于给定的窗口,我必须根据以下内容计算新的状态: 上一个状态(即上一个窗口的计算状态) 接收的事件 我希望避免调用外部服务来获取上一个状态,而是获取上一个窗口的状态。有可能吗?