基于窗口和元素计数从数据流写入 GCS

Posted

技术标签:

【中文标题】基于窗口和元素计数从数据流写入 GCS【英文标题】:Writing to GCS from dataflow based on windowing and element count 【发布时间】:2019-01-27 22:12:51 【问题描述】:

我正在尝试实现一个解决方案,我需要使用数据流将来自 pubsub 的数据 (json) 消息写入 GCS。我的问题与one

完全相同

我需要根据窗口或元素计数来编写。 以下是上述问题中写入的代码示例:

windowedValues.apply(FileIO.<String, String>writeDynamic()
        .by(Event::getKey)
        .via(TextIO.sink())
        .to("gs://data_pipeline_events_test/events/")
        .withDestinationCoder(StringUtf8Coder.of())
        .withNumShards(1)
        .withNaming(key -> FileIO.Write.defaultNaming(key, ".json")));

解决方案建议使用 FileIO.WriteDynamic 函数。但我无法理解 .by(Event::getKey) 的作用以及它的来源。 非常感谢您对此的任何帮助。

【问题讨论】:

【参考方案1】:

它根据事件的键将元素分组。

据我了解,事件来自使用 KV 类的 PCollection,因为它具有 getKey 方法。

注意 :: 是 Java 8 中包含的一个新运算符,用于引用类的方法。

【讨论】:

以上是关于基于窗口和元素计数从数据流写入 GCS的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Dataflow 中使用 Apache Beam 将数据从 Google PubSub 写入 GCS 时出错

性能:Google Dataflow 将 avro 文件写入 GCS

使用 Apache Beam 以 CSV 格式将 BigQuery 结果写入 GCS

我们可以使用单个 Google Cloud Dataflow 将来自多个 Pubsub(源)的数据写入多个 GCS(接收器)吗?

从 pubsub->bigquery 移动到 pubsub->gcs (avro)->bigquery

如何在 Python 中创建从 Pub/Sub 到 GCS 的数据流管道