Apache Beam создает временные ряды из потока событий - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь создать временную серию подсчета событий, произошедших за определенный период времени.

События закодированы как

PCollection<KV<String, Long>> events;

Где String является идентификатором источник события, а long - это временная метка события.

Я хочу получить PCollection<Timeseries> временных рядов, которые имеют форму

class Timeseries  {
  String id;
  List<TimeseriesWindow> windows;
}

class TimeseriesWindow  {
  long timestamp;
  long count;
}

Пример игрушки с фиксированным размером окна ( это правильный термин?), равный 10 секунд , а общая продолжительность серии 60 секунд :

Ввод:

[("one", 1), ("one", 13), ("one", 2), ("one", 43), ("two", 3)]

Выход :

[
  {
    id: "one"
    windows: [
      {
        timestamp: 0,
        count: 2
      },
      {
        timestamp: 10,
        count: 1
      },
      {
        timestamp: 20,
        count: 0
      },
      {
        timestamp: 30,
        count: 0
      },
      {
        timestamp: 40,
        count: 1
      },
      {
        timestamp: 50,
        count: 0
      }
    ]
  },
  {
    id: "two"
    windows: [
      {
        timestamp: 0,
        count: 1
      },
      {
        timestamp: 10,
        count: 0
      },
      {
        timestamp: 20,
        count: 0
      },
      {
        timestamp: 30,
        count: 0
      },
      {
        timestamp: 40,
        count: 0
      },
      {
        timestamp: 50,
        count: 0
      }
    ]
  }
]

Надеюсь, это имеет смысл :)

1 Ответ

0 голосов
/ 20 февраля 2020

Вы можете сделать GroupByKey для преобразования вашего ввода в

[
    ("one", [1, 13, 2, 43]),
    ("two", [3]),
]

, после чего вы можете применить DoFn для преобразования списка целых чисел в объект Timeseries (например, создавая список TimeseriesWindow в соответствующее время, а затем перебирая значения, увеличивающие счет.)

Вы также можете взглянуть на встроенные возможности управления окнами , чтобы узнать, будет ли это соответствовать вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...