Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何在python中将动态pcollection作为sideinput传递?_Python 3.x_Google Cloud Platform_Google Cloud Dataflow_Apache Beam - Fatal编程技术网

Python 3.x 如何在python中将动态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([

我有一个用例,需要将一个文件路径(作为新元素)附加到另一个pcollection,它是一个元素字典

因此,我决定将pcollection作为下一个转换的输入,并将file_路径(由pardo函数生成)作为侧输入

生成的文件路径是一个pCollection,因此我将其用作:

beam.pvalue.AsSingelton(文件路径)

但奇怪的是,它没有执行这个语句,因此没有输出,甚至没有任何错误。 但当我使用以下方法创建pcollection时:

file\u path=beam.Create(['some\u path\u value'])然后如上所述进行传递 beam.pvalue.AsSingleton(文件路径)它工作得非常好

但我不想显式地创建pcollection,我需要使用上面的转换输出,因为它是sideinput

我尝试了我的“文件路径”的每一种形式,比如列表、字典、元组

我也尝试了不同的光束功能

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(文件路径新))) 你能用更好的方法解决它吗