Apache将数据流pub / sub解析为字典

时间:2019-07-14 15:23:47

标签: python google-cloud-dataflow apache-beam google-cloud-pubsub

我正在使用Beam / Dataflow运行流传输管道。我正在从pub / sub中读取我的输入,并将其转换为如下所示的dict:

    raw_loads_dict = (p 
      | 'ReadPubsubLoads' >> ReadFromPubSub(topic=PUBSUB_TOPIC_NAME).with_output_types(bytes)
      | 'JSONParse' >> beam.Map(lambda x: json.loads(x)) 
    )

由于这是在高吞吐量管道的每个元素上完成的,我担心这不是最有效的方法吗?

在这种情况下,最好的做法是什么,考虑到某些情况下我要处理数据,但是有可能将其直接流式传输到bigquery中。

1 个答案:

答案 0 :(得分:1)

这种方法很好,除非发生了效率极低的事情,或者您有特定的担忧(例如,您观察到的某些指标似乎不正确)。 JSON解析似乎足够轻巧,因此不会成为问题。梁管道流道甚至可以潜在地融合多个类似的操作,以便在同一台机器上执行它们以提高效率,从而避免在工作机之间传输数据。

您可能开始发现性能问题的主要情况可能涉及需要聚合数据的外部系统(例如,网络延迟或调用外部服务时的限制)或分组操作(例如,使用GroupByKey / CoGroupByKey实施联接)在某个位置的持久性存储中,需要在辅助计算机之间传输(随机操作)。在这种情况下,尽管与网络,持久性和其他相关成本相比,JSON解析或运行每个元素相对简单的转换代码的成本可能微不足道。