Python 3.x 如何在python中将动态pcollection作为sideinput传递?
我有一个用例,需要将一个文件路径(作为新元素)附加到另一个pcollection,它是一个元素字典 因此,我决定将pcollection作为下一个转换的输入,并将file_路径(由pardo函数生成)作为侧输入 生成的文件路径是一个pCollection,因此我将其用作: beam.pvalue.AsSingelton(文件路径) 但奇怪的是,它没有执行这个语句,因此没有输出,甚至没有任何错误。 但当我使用以下方法创建pcollection时: file\u path=beam.Create(['some\u path\u value'])然后如上所述进行传递 beam.pvalue.AsSingleton(文件路径)它工作得非常好 但我不想显式地创建pcollection,我需要使用上面的转换输出,因为它是sideinput 我尝试了我的“文件路径”的每一种形式,比如列表、字典、元组 我也尝试了不同的光束功能Python 3.x 如何在python中将动态pcollection作为sideinput传递?,python-3.x,google-cloud-platform,google-cloud-dataflow,apache-beam,Python 3.x,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,我有一个用例,需要将一个文件路径(作为新元素)附加到另一个pcollection,它是一个元素字典 因此,我决定将pcollection作为下一个转换的输入,并将file_路径(由pardo函数生成)作为侧输入 生成的文件路径是一个pCollection,因此我将其用作: beam.pvalue.AsSingelton(文件路径) 但奇怪的是,它没有执行这个语句,因此没有输出,甚至没有任何错误。 但当我使用以下方法创建pcollection时: file\u path=beam.Create([
def collect(pcoll, path):
print(pcoll, "-----------")
print(path,"-------------")
return path
class Extract(beam.DoFn):
def process(self, element, *args, **kwargs):
pub_sub_json= json.loads(element)
gcs_url = "gs://" + pub_sub_json["bucket"] + "/" + pub_sub_json["name"]
yield gcs_url
file_path = (p |"Read" >> beam.io.ReadFromPubSub(
subscription=options.session_subscription,
with_attributes=False)
| "Extract" >> beam.ParDo(Extract()))
result = (some_other_pcollection |"display" >> beam.FlatMap(collect, path=beam.pvalue.AsList(file_path)))
Expect:它应该进入collect函数内部并打印任何提取方法将返回的文件路径
没有错误和警告,但它甚至没有进入collect方法内部。它通常发生在数据不来自上述转换时。但我检查了很多次文件名中有数据
但是没有输出,它只在我使用beam.Create([“pass_some_file_path”])并将其结果用作sideinput时显示输出。转换的输出应为2元组((key,value))格式,以便接受它作为带有pvalue.AsDict()的side输入。它也适用于value.AsList() def收集(pcoll,路径): 打印(pcoll,“------------”号) 打印(路径,“----------------”) 返回路径 类别摘录(beam.DoFn): def流程(自身、元素、*args、**kwargs): pub_sub_json=json.loads(元素) gcs_url=“gs://”+pub_sub_json[“bucket”]+“/”+pub_sub_json[“name”] 收益率pvalue.TaggedOutput(“url”,“url”:gcs_url)) 文件路径=(p |“读取”>>beam.io.ReadFromPubSub( 订阅=选项。会话\订阅, 带_属性=False) |“Extract”>>beam.ParDo(Extract())) file_path_new=(file_path[“url”]|“按键分组”>>beam.GroupByKey()) 结果=(一些其他收集|“显示”>>beam.FlatMap(收集,路径=beam.pvalue.AsList(文件路径新))) 你能用更好的方法解决它吗