【问题标题】:Find max value in a Flink DataStream在 Flink DataStream 中查找最大值
【发布时间】:2021-03-16 17:02:50
【问题描述】:

我有一个 Tuple2 的 DataStream。我想找到字段f1 的最大值,最好不用keyBy()。在 Flink 中可以吗?

我想出了一个“黑客”:

DataStream<Tuple2<String, Integer>> input;  // Initialized somewhere
DataStream<Tuple2<String, Integer>> maxEntry = 
                        input.map(entry -> new Tuple3(entry.f0, entry.f1, "foo"))
                             .keyBy(2)
                             .maxBy(1)
                             .map(entry -> new Tuple2(entry.f1, entry.f1));

在我看来,做中间的 map()keyBy() 似乎很浪费/效率低下。有没有更好的办法?

谢谢, 艾哈迈德。

【问题讨论】:

    标签: apache-flink flink-streaming


    【解决方案1】:

    你可以这样做,这仍然很老套,但不那么老套

    input.keyBy(e -> "foo").maxBy(1)
    

    但请记住

    1. 通过常量键控将有效并行度降低到 1(在这种情况下这很好,因为您需要在同一位置处理每个事件以找到全局最大值)。
    2. KeyedStream#maxBy 将来会从 Flink 中移除。有关详细信息,请参阅 https://stackoverflow.com/a/66651834/2000823

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      相关资源
      最近更新 更多