[英]Run script on GCP Dataflow
我开始尝试 Google Cloud Dataflow,在经典wordcount
示例之后,我编写了自己的脚本:
import argparse
import sys
import apache_beam as beam
from apache_beam.io import ReadFromText
from apache_beam.io import WriteToText
from apache_beam.options.pipeline_options import PipelineOptions
class Split(beam.DoFn):
def process(self, element):
(numfact, bag, type, owner,
main_owner, client) = element.splt('\t')
return [{
'numfact': int(numfact),
'type': type,
'owner': owner
}]
parser = argparse.ArgumentParser()
parser.add_argument('--input')
parser.add_argument('--output')
known_args, extra_args = parser.parse_known_args(sys.argv[1:])
options = PipelineOptions(extra_args)
p = beam.Pipeline(options=options)
print(known_args)
print(extra_args)
csv_lines = (p | "Load" >> ReadFromText(known_args.input, skip_header_lines=1) | "Process" >> beam.ParDo(Split()) | "Write" >> WriteToText(known_args.output))
这是来自输入文件的示例:
Numfact BAG TYPE OWNER MAIN OWNER CLIENT
728632636 CNT Alternativos Kramer Ortiz ACCIDENTES PERSONALES TELETICKET Rimac
704845964 CNT Alternativos Kramer Ortiz SOAT Canal
701387639 CNT SIN ASIGNAR Sin asignar WEB VEHICULOS Canal
692571746 CNT Concesionarios Kramer Ortiz WEB VEHICULOS Canal
682823453 CNT Alternativos Kramer Ortiz WEB VEHICULOS Canal
682823452 CNT Alternativos Kramer Ortiz WEB VEHICULOS Canal
682823451 CNT Alternativos Kramer Ortiz WEB VEHICULOS Canal
682823454 CNT Alternativos Kramer Ortiz WEB VEHICULOS Canal
706853395 CNT Alternativos Kramer Ortiz ACCIDENTES PERSONALES - WEB Canal
706466281 CNT Alternativos Kramer Ortiz SOAT Canal
最后,我调用它像这样执行(文件保存为 .txt):
python -m beam --input gs://dummy_bucket/data_entry/pcd/pcd_ensure.txt --output gs://dummy_bucket/outputs --runner DataflowRunner --project dummyproject-268120 --temp_location gs://dummy_bucket/tmp --region us-central1
此后,它在控制台上显示打印,但不在 DataFlow 控制台中注册执行。
更新
这是控制台的样子:
(gcp) gocht@~/script$ python -m beam --input gs://dummy_bucket/data_entry/pcd/pcd_ensure.txt --output gs://dummy_bucket/outputs --runner DataflowRunner --project dummyproject-268120 --temp_location gs://dummy_bucket/tmp --region us-central1
Namespace(input='gs://dummy_bucket/data_entry/pcd/pcd_ensure.txt', output='gs://dummy_bucket/outputs') ['--runner', 'DataflowRunner', '--project', 'dummyproject-268120', '--temp_location', 'gs://dummy_bucket/tmp', '--region', 'us-central1']
这仅显示放置在代码脚本上的打印。
我错过了什么?
谢谢!
你会需要
result = p.run()
在文件末尾运行管道。
基本上我认为你已经构建了你的管道,但并没有真正要求运行它。
由于答案在评论中,所以也写在这里:)
您需要通过执行以下操作来实际运行管道:
p.run().wait_until_finish()
如果您感到卡住并且不确定出了什么问题,请尝试查看此处提供的示例 - 从数据流开始时,java 版本确实对我帮助很大:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.