Google cloud dataflow ApacheBeam中工人的入口点是什么?(称为什么方法?)

Google cloud dataflow ApacheBeam中工人的入口点是什么?(称为什么方法?),google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,ApacheBeam有大量优秀的文档,但我没有看到创建管道所运行的代码与worker运行的代码相比。我想我看到这段代码将运行一次,但它也将由每个启动的工人运行 publicstaticvoidmain(字符串[]args){ //创建管道。 管道选项= PipelineOptionFactory.fromArgs(args.create(); Pipeline p=Pipeline.create(选项); //通过应用“读取”转换创建PCollection“行”。 p收集线=p应用( “Read

ApacheBeam有大量优秀的文档,但我没有看到创建管道所运行的代码与worker运行的代码相比。我想我看到这段代码将运行一次,但它也将由每个启动的工人运行

publicstaticvoidmain(字符串[]args){
//创建管道。
管道选项=
PipelineOptionFactory.fromArgs(args.create();
Pipeline p=Pipeline.create(选项);
//通过应用“读取”转换创建PCollection“行”。
p收集线=p应用(
“ReadMyFile”,TextIO.read(),from(“gs://some/inputData.txt”);
}

这是一个很好的问题,也是Apache Beam的核心所在

tl;dr当工作人员启动时,没有调用用户定义的入口点

长答案

当您使用ApacheBeamSDK(使用applies等)编写代码时,您真正要做的是在后台创建一个包含所有应用的转换的图形,请参阅文档。因此,一旦调用了
p.run()
,图形就被发送到工作进程以执行。然后将图上的转换分解为组件并按顺序执行

至于您在问题中编写的代码,它将只运行一次。当您执行jar时,该代码只运行一次。但是,图形中的转换是针对数据中的每个元素运行的(或更多,或更少,取决于图形)

如果您对如何执行转换和用户定义函数(PARDO)的实现感到好奇,那么该入口点就存在于ApacheBeamSDK中