TextIO 可以写入从 window maxTimestamp 派生的前缀吗?
Can TextIO write to prefixes derived from the window maxTimestamp?
我正在处理 windowed 的 PubSub 消息流,我想将它们存档到 GCS。我希望存档文件有一个从 window 时间戳派生的前缀(类似于 gs://bucket/messages/2015/01/messages-2015-01-01.json)。这可以用 TextIO.Write 实现,还是我需要实现自己的 FileBasedSink?
TextIO.Write 应该可以。无需自定义文件接收器。
在您的情况下,您想将 PubSub 消息写入输出文本文件 - 不是在本地,而是在远程 GS 上。你应该能够使用:
PCollection.apply.TextIO.Write().to(
由于您正在处理 PubSub 消息流,因此您的 window 是无界的,并且您的 PubSub 数据源已经为 PCollection 中的每个元素提供了时间戳。
如果您希望分配时间戳,您的 ParDo 转换需要使用使用 ProcessContext.outputWithTimestamp() 输出元素的 DoFn。
总之,您可以在确保 PCollection 中的元素输出带有时间戳后使用 TextIO.Write。
您只是在寻找函数 TextIO.Write.Bound<String>.withSuffix()
or TextIO.Write.Bound<String>.to()
吗?这些似乎允许您为输出文件名提供后缀或前缀。
现在,TextIO.Write 不支持在流模式下操作 – 写入 GCS 很棘手,例如,因为您不能从多个工作程序同时写入文件,也不能附加到文件一旦他们关闭。我们计划为 TextIO 添加流媒体支持。
今天使用 BigQuery 而不是 GCS 将获得对此的最佳支持 – 因为我们已经支持在流式传输期间写入 BigQuery,并且您可以根据 window 选择要写入的 table name,并且 BigQuery 支持同时从多个不同的 worker 写入。
这可以通过最近在 TextIO
中添加的窗口写入功能来完成。请参阅 documentation for TextIO,特别是 withWindowedWrites
和 to(FilenamePolicy)
。此功能也存在于 AvroIO
.
中
我正在处理 windowed 的 PubSub 消息流,我想将它们存档到 GCS。我希望存档文件有一个从 window 时间戳派生的前缀(类似于 gs://bucket/messages/2015/01/messages-2015-01-01.json)。这可以用 TextIO.Write 实现,还是我需要实现自己的 FileBasedSink?
TextIO.Write 应该可以。无需自定义文件接收器。
在您的情况下,您想将 PubSub 消息写入输出文本文件 - 不是在本地,而是在远程 GS 上。你应该能够使用: PCollection.apply.TextIO.Write().to(
由于您正在处理 PubSub 消息流,因此您的 window 是无界的,并且您的 PubSub 数据源已经为 PCollection 中的每个元素提供了时间戳。
如果您希望分配时间戳,您的 ParDo 转换需要使用使用 ProcessContext.outputWithTimestamp() 输出元素的 DoFn。
总之,您可以在确保 PCollection 中的元素输出带有时间戳后使用 TextIO.Write。
您只是在寻找函数 TextIO.Write.Bound<String>.withSuffix()
or TextIO.Write.Bound<String>.to()
吗?这些似乎允许您为输出文件名提供后缀或前缀。
现在,TextIO.Write 不支持在流模式下操作 – 写入 GCS 很棘手,例如,因为您不能从多个工作程序同时写入文件,也不能附加到文件一旦他们关闭。我们计划为 TextIO 添加流媒体支持。
今天使用 BigQuery 而不是 GCS 将获得对此的最佳支持 – 因为我们已经支持在流式传输期间写入 BigQuery,并且您可以根据 window 选择要写入的 table name,并且 BigQuery 支持同时从多个不同的 worker 写入。
这可以通过最近在 TextIO
中添加的窗口写入功能来完成。请参阅 documentation for TextIO,特别是 withWindowedWrites
和 to(FilenamePolicy)
。此功能也存在于 AvroIO
.