如何用Python窥探googledataflow/apachebeam内部

如何用Python窥探googledataflow/apachebeam内部,python,workflow,google-cloud-dataflow,development-environment,apache-beam,Python,Workflow,Google Cloud Dataflow,Development Environment,Apache Beam,我正在构建一个数据流运行程序,它将把JSON文件作为字符串从GCS中清理出来,并将它们传递到BigQuery表中。这项任务超出了我对数据流理解的极限,我无法在不运行整个管道的情况下对PCollections/Beam操作进行实验,这让我很沮丧 我的主要问题是:如何在不同时运行整个操作的情况下使用数据流(特定于python)进行开发?是否有一种方法可以逐步完成每个梁操作,并实际查看PCollection内部,以查看变换/自定义方法对输入所做的操作 例如——我有以下自定义类(从另一篇关于在数据流中解

我正在构建一个数据流运行程序,它将把JSON文件作为字符串从GCS中清理出来,并将它们传递到BigQuery表中。这项任务超出了我对数据流理解的极限,我无法在不运行整个管道的情况下对PCollections/Beam操作进行实验,这让我很沮丧

我的主要问题是:如何在不同时运行整个操作的情况下使用数据流(特定于python)进行开发?是否有一种方法可以逐步完成每个梁操作,并实际查看PCollection内部,以查看变换/自定义方法对输入所做的操作

例如——我有以下自定义类(从另一篇关于在数据流中解析JSON的SO文章中借用):

然后我只想将这个JSON输出到GCS中的一个新文件以查看它,但是它输出的是一个空白文件。该守则如下:

  pipeline_options = PipelineOptions(pipeline_args)
  pipeline_options.view_as(SetupOptions).save_main_session = True
  with beam.Pipeline(options=pipeline_options) as p:
    lines = p | 'Read JSON' >> beam.io.Read(JsonFileSource(known_args.input))
    output = lines
    output | WriteToText(known_args.output)

我真的很想进入这个过程,尝试不同的方法来格式化我的结果。其他人是如何使用数据流开发的

你不能。我的建议是确保这些部分能够独立工作(编写单元测试),然后在确信管道是正确拼接的情况下运行管道。我无法想象任何小于5-10M的记录都需要几分钟的时间。感谢@coldspeed的评论,你是对的。作业运行约需要2分钟,包括安装和拆卸。我不喜欢stop-n-go工作流,只是希望我能实时操作对象并逐步完成。这并不容易,因为设置和资源都很昂贵,而且通常是根据需要分配的。断点在此设置中无法正常工作。您可能会对pyspark感兴趣,pyspark致力于弹性分布式数据集的概念……在基本层面上,您可以将日志添加到管道中,并在控制台中查看日志,或者还有stackdriver监控集成(需要付费)。有一个
度量的概念
,目前在Python中有点有限,但是您可以将它们添加到输入中,例如查看有多少元素进入。
  pipeline_options = PipelineOptions(pipeline_args)
  pipeline_options.view_as(SetupOptions).save_main_session = True
  with beam.Pipeline(options=pipeline_options) as p:
    lines = p | 'Read JSON' >> beam.io.Read(JsonFileSource(known_args.input))
    output = lines
    output | WriteToText(known_args.output)