首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Apache梁中制作10条记录的滚动窗口

如何在Apache梁中制作10条记录的滚动窗口
EN

Stack Overflow用户
提问于 2018-01-01 03:18:06
回答 2查看 1.2K关注 0票数 0

我有一组有顺序ID的记录。记录集按ID字段排序。我想取一个滚动窗口,有10个记录(即记录0-9,然后记录1-10,记录2-11,等等)。在Python和Pandas中,以下内容工作得很好:

代码语言:javascript
运行
复制
windows = my_data_frame.rolling(10).sum().dropna()

我想在Apache中完成同样的任务。读取Apache光束编程指南似乎是通过时间戳进行窗口化的唯一方法。此外,这个例子意味着,为了通过记录完成窗口,我需要在每个记录中添加一个任意时间戳,然后在该时间戳上添加一个窗口。

我对Apache非常陌生,因为按记录加窗口基本上是Pandas中的一行,我觉得我在Beam中遗漏了一些东西,这将使我能够完成这个任务。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-26 20:02:35

您可以将顺序ID作为事件时间戳注入,并使用SlidingWindow.of(10).every(1)。时间单位取决于如何将顺序ID转换为事件时间戳。

代码看起来就像

代码语言:javascript
运行
复制
TextIO
   .read(...)
   .apply(ParDo.of(new DoFn<String, Long>() {
      @ProcessElement
      public void processElement(ProcessContext c) {
        c.outputWithTimestamp(..., timestamp transformed from sequential IDs)
      }
   }))
   .apply(SlidingWindow.of(10).every(1))
   .apply(Sums.longsGlobally())
票数 0
EN

Stack Overflow用户

发布于 2018-01-04 19:50:54

由于您已经拥有了一组记录,所以可以编写批处理管道。对于每个记录,您可以将其映射到一个键/值对,其中键是id/10,值是记录。然后,您可以执行一个GroupByKey,哪个组(或在您的单词中,窗口) 10条记录在一个键中。

在您的示例中,如果您希望每10个元素加和一次,也可以使用求和转换(在您用键附加每个记录之后),例如来自https://beam.apache.org/documentation/sdks/javadoc/0.5.0/org/apache/beam/sdk/transforms/Sum.html

代码语言:javascript
运行
复制
PCollection<KV<String, Integer>> input = ...;
PCollection<KV<String, Integer>> sumPerKey = input
    .apply(Sum.<String>integersPerKey());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48046950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档