【问题标题】:Apache beam list to PCollectionApache 光束列表到 PCollection
【发布时间】:2020-06-09 11:11:31
【问题描述】:

我的输入是一个 json 列表,我想要一个多元素 PCollection。这是我的代码:

def parse_json(data):
    import json
    for i in json.loads(data):
        return i
data = (p
    | "Read text" >> beam.io.textio.ReadFromText(f'gs://{bucket_name}/not_processed/2020-06-08T23:59:59.999Z__rms004_m1__not_sent_msg.txt')
    | "Parse json" >> beam.Map(parse_json))

问题是当列表由 2 个元素组成时,我只获取列表的第一个元素。

我如何做到这一点?

【问题讨论】:

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


    【解决方案1】:

    我发现了。

    Apache Beam 中有一个叫做 ParDo 的函数就是为了这个。

    def parse_json(data):
        import json
        return json.loads(data)
    
    data = (p
        | "Read text" >> beam.io.textio.ReadFromText(f'gs://{bucket_name}/not_processed/2020-06-08T23:59:59.999Z__rms004_m1__not_sent_msg.txt')
        | "Parse json" >> beam.ParDo(parse_json))
    

    【讨论】:

    • 你也可以使用FlatMap,它建立在ParDo之上。您可以找到Map 和FlatMap (ParDo) 之间的区别here
    猜你喜欢
    • 2018-05-16
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 2020-01-10
    • 1970-01-01
    • 2022-12-31
    相关资源
    最近更新 更多