Python Apache Beam: значение даты вне диапазона - PullRequest
0 голосов
/ 07 ноября 2018

Применение этого или этого примера для сборки моей программы, каждый раз, когда я пытаюсь вставить в Big Query, у меня появляется эта ошибка:

OverflowError: значение даты выходит за пределы диапазона [при выполнении «Формат»]

Мой лучевой конвейер это:

Bigquery = (transformation
            | 'Format' >> beam.ParDo(FormatBigQueryoFn())
            | 'Write to BigQuery' >> beam.io.Write(beam.io.BigQuerySink(
            'XXXX',
            schema=TABLE_SCHEMA,
            create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED,
            write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND
        )))

В классе FormatBigQueryoFn находится логика окна данных времени

Код примера 1:

def timestamp2str(t, fmt='%Y-%m-%d %H:%M:%S.000'):
  """Converts a unix timestamp into a formatted string."""
    return datetime.fromtimestamp(t).strftime(fmt)

    class TeamScoresDict(beam.DoFn):
  """Formats the data into a dictionary of BigQuery columns with their values
  Receives a (team, score) pair, extracts the window start timestamp, and
  formats everything together into a dictionary. The dictionary is in the format
  {'bigquery_column': value}
  """

def process(self, team_score, window=beam.DoFn.WindowParam):
    team, score = team_score
    start = timestamp2str(int(window.start))
    yield {
        'team': team,
        'total_score': score,
        'window_start': start,
        'processing_time': timestamp2str(int(time.time()))
}

Код примера 2:

class FormatDoFn(beam.DoFn):
  def process(self, element, window=beam.DoFn.WindowParam):
    ts_format = '%Y-%m-%d %H:%M:%S.%f UTC'
    window_start = window.start.to_utc_datetime().strftime(ts_format)
    window_end = window.end.to_utc_datetime().strftime(ts_format)
    return [{'word': element[0],
             'count': element[1],
             'window_start':window_start,
'window_end':window_end}]

Что может быть не так в моем конвейере?

EDIT:

Если я напечатаю, например, window.start, я получу:

Timestamp(-9223372036860)

1 Ответ

0 голосов
/ 08 ноября 2018

Проблема заключалась в том, что я читал данные из файла перед тем, как проверить их с помощью Google Pub / Sub.

Пока я читал данные из файла, элементы не имеют метки времени.

Обязательно иметь отметку времени в вашем элементе.

Pub / Sub автоматически прикрепляет эту метку времени.

Из документации :

Простейшей формой работы с окнами является использование фиксированных временных окон: при заданной временной отметке PCollection, которая может постоянно обновляться, каждое окно может захватывать (например) все элементы с временными метками, которые попадают в пятиминутный интервал.

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