Может ли поток данных Google преобразовать введенную дату в метку времени большого запроса - PullRequest
0 голосов
/ 05 февраля 2019

совершенно новый для потока данных, я искал несколько дней для решения моей проблемы.Мне нужно запустить конвейер, который считывает дату из файла CSV в следующем формате: 2019010420300033, пропуская его через различные потоки и заканчивая большим запросом как отметка времени.Есть ли способ сделать это или входной файл должен быть преобразован сначала в конвертируемую дату (я знаю, что формат работает следующим образом: 2019-01-01 20: 30: 00.331).Или, возможно ли, чтобы поток данных каким-то образом выводил новый конвейер с этой датой?

спасибо

1 Ответ

0 голосов
/ 05 февраля 2019

Это простая работа для потока данных.Вы можете использовать ParDo или Map.

В приведенном ниже примере каждая строка из CSV будет передана в Map (convertDate).Функция convertDate, которую нужно изменить, чтобы она соответствовала вашему преобразованию даты, затем возвращает измененную строку.Затем весь преобразованный CSV записывается в набор выходных файлов.

Пример (упрощенный) с использованием Map:

def convertDate(line):
    # convert date to desired format
    # Split line into columns, change date format for desired column
    # Rejoin columns into line and return
    cols = line.split(',')  # change for your column seperator
    cols[2] = my_change_method_for_date(cols[2]) # code the date conversion here
    return ",".join(cols)

with beam.Pipeline(argv=pipeline_args) as p:
    lines = p | 'ReadCsvFile' >> beam.io.ReadFromText(args.input)
    lines = lines | 'ConvertDate' >> beam.Map(convertDate)
    lines | 'WriteCsvFile' >> beam.io.WriteToText(args.output)
...