【问题标题】:What to return from apache beam pcollection to write to bigquery从 apache beam pcollection 返回什么以写入 bigquery
【发布时间】:2020-02-01 05:31:55
【问题描述】:

我正在阅读 beam 文档和一些 stackoverflow 问题/answers,以了解我将如何将 pubsub 消息写入 bigquery。截至目前,我有获取protobuf 消息并能够decode 它们的工作示例。代码是这样的

(p
 | 'ReadData' >> apache_beam.io.ReadFromPubSub(topic=known_args.input_topic, with_attributes=True)
 | 'ParsePubsubMessage' >> apache_beam.Map(parse_pubsubmessage)
 )

最终,我想做的是将解码的 pub-sub 消息写入 bigquery。所有属性(和解码的字节数据)都将具有一对一的列映射。

所以让我感到困惑的是我的parse_pubsubmessage 应该返回什么。截至目前,它正在返回一个具有所有字段的自定义类,即

class DecodedPubsubMessage:
    def __init__(self, attr, event):
        self.attribute_one = attr['attribute_one']
        self.attribute_two = attr['attribute_two']

        self.order_id = event.order.order_id
        self.sku = event.item.item_id
        self.triggered_at = event.timestamp
        self.status = event.order.status

这是执行此数据流的正确方法吗?我在想我将使用此返回值写入 bigquery,但由于高级 python 功能,我无法理解如何。这是我正在查看的参考example。在此示例中,我不确定如何在返回的对象上执行 lambda 映射以写入 bigquery。

【问题讨论】:

  • 是否要将这个类的所有属性保存为表字段?

标签: python google-bigquery google-cloud-dataflow apache-beam apache-beam-io


【解决方案1】:

您的类必须继承自 DoFn 并重载“进程”方法,并且不对 init

进行转换

并且在转换之后您可以使用“return [obj]”或“yield obj”来返回所需的输出 PCollection

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 2017-12-15
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多