Может ли TextIO записывать префиксы, полученные из окна maxTimestamp?

Я обрабатываю оконный поток сообщений PubSub и хочу заархивировать их в GCS. Я бы хотел, чтобы заархивированные файлы имели префикс, полученный из метки времени окна (что-то вроде gs://bucket/messages/2015/01/messages-2015-01-01.json). Возможно ли это с TextIO.Write, или мне нужно реализовать свой собственный FileBasedSink?


person Dave Jack    schedule 04.11.2015    source источник


Ответы (4)


Это можно сделать с помощью недавно добавленной функции оконной записи в TextIO. См. документацию. для TextIO см., в частности, withWindowedWrites и to(FilenamePolicy). Эта функция также присутствует в AvroIO.

person jkff    schedule 12.07.2017

Вы просто ищете функцию TextIO.Write.Bound<String>.withSuffix() или TextIO.Write.Bound<String>.to()? Кажется, это позволит вам указать суффикс или префикс для имени выходного файла.

person Nick    schedule 09.11.2015

Прямо сейчас TextIO.Write не поддерживает работу в потоковом режиме — запись в GCS сложна, например, потому что вы не можете писать в файл одновременно из нескольких воркеров и вы не можете добавлять файлы после их закрытия. У нас есть планы добавить поддержку потоковой передачи в TextIO.

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

person Dan Halperin    schedule 10.11.2015
comment
Дэн, почему это нельзя сделать с помощью TextIO.Write.Bound.withSuffix? почему это отличается для потоковой передачи? в конце концов, потоковую передачу можно рассматривать как повторяющееся задание, и каждое задание может писать в конце каждого задания. - person Zig Mandel; 13.11.2015
comment
Строка, передаваемая в .withSuffix(), является константой времени компиляции. Кроме того, TextIO.Write в настоящее время нельзя использовать с исполнителем потоковой передачи. - person Dan Halperin; 17.11.2015
comment
простите мое невежество. тогда какой смысл иметь суффикс в твердом переплете во время компиляции? (учитывая, что я также могу объединить это во время компиляции без withSuffix?) Кажется, если бы каждое окно могло иметь другое имя файла, не было бы проблемы, когда параллельное задание пишет - person Zig Mandel; 17.11.2015
comment
Команда withSuffix используется для указания шаблона для файлов. TextIO создает много файлов с префиксом формы-00000-из-00010-суффикса. Таким образом, вы можете withSuffix(".json"), чтобы все файлы имели расширение .json. См.: cloud.google.com/dataflow/java-sdk/JavaDoc/com/google/cloud/ или cloud.google.com/dataflow/model/avro-io#writing в качестве примера. - person Dan Halperin; 17.11.2015

person    schedule
comment
это, кажется, не отвечает на вопрос. он уже умеет писать в GCS. он спрашивает об изменении имени выходного файла. - person Zig Mandel; 07.11.2015