我是Pub / Sub和Dataflow / Beam的新手。我在Spark和Kafka中完成了一项任务,我想使用Pub / Sub和Dataflow / Beam做同样的事情。据我所知,到目前为止,Kafka与Pub / Sub类似,Spark类似于Dataflow / Beam。
任务是获取JSON文件并写入Pub / Sub主题。然后使用Beam / Dataflow我需要将这些数据放入PCollection中。我将如何实现这一目标?
答案 0 :(得分:4)
我解决了上述问题。我能够连续读取pubsub主题中的数据,然后进行一些处理,然后将结果写入数据存储区。
with beam.Pipeline(options=options) as p:
# Read from PubSub into a PCollection.
lines = p | beam.io.ReadStringsFromPubSub(topic=known_args.input_topic)
# Group and aggregate each JSON object.
transformed = (lines
| 'Split' >> beam.FlatMap(lambda x: x.split("\n"))
| 'jsonParse' >> beam.ParDo(jsonParse())
| beam.WindowInto(window.FixedWindows(15,0))
| 'Combine' >> beam.CombinePerKey(sum))
# Create Entity.
transformed = transformed | 'create entity' >> beam.Map(
EntityWrapper(config.NAMESPACE, config.KIND, config.ANCESTOR).make_entity)
# Write to Datastore.
transformed | 'write to datastore' >> WriteToDatastore(known_args.dataset_id)
答案 1 :(得分:1)
Pubsub是一个流媒体源/接收器(只读取/写入一次它没有意义)。数据流python SDK支持流媒体尚不可用。
文档:https://cloud.google.com/dataflow/release-notes/release-notes-python。
一旦流媒体可用,您应该可以非常轻松地完成这项工作。
但是,如果你要从文件 - > pubsub然后pubsub - > pcollection你应该能够使用批处理管道执行此操作并删除pubsub方面。您可以查看梁的基本文件io。