代码之家  ›  专栏  ›  技术社区  ›  Bartosz Bilicki Ievgen Lukash

Apache梁的固定大小窗口

  •  0
  • Bartosz Bilicki Ievgen Lukash  · 技术社区  · 5 年前

    如何在apachebeam中定义固定大小(固定项目数)的窗口?

    我知道我们有

    (FixedWindows.of(Duration.standardMinutes(10))
    

    更多详细信息: 我正在向S3写入大量数据(53gb)。目前我的程序使用

    FileIO.<KV<...>writeDynamic()
    .by(kv -> kv.getKey())
    

    我不需要任何特殊的分组。理想情况下,我希望数据分布均匀,这样写操作将同时进行并尽快完成。

    0 回复  |  直到 5 年前
        1
  •  1
  •   danielm    5 年前

    保证大小完全相等的分组是相当困难的,但是您可以通过使用数据的散列(模化某个常量)作为键来获得非常接近的结果。例如:

    FileIO.<KV<...>writeDynamic()
    .by(kv -> kv.hashCode() % 530)
    

    这将提供大致相等的100MB分区。

    此外,如果您使用的是DataflowRunner,则根本不需要指定键;系统将自动对数据进行分组,并动态地重新平衡负载以避免掉队。为此,请使用文件IO.write()而不是文件IO.writeDynamic().