Java 转移数据流模板作业失败
根据《数据流指南》,我创建了这个简单的模板数据流作业示例:Java 转移数据流模板作业失败,java,google-cloud-dataflow,Java,Google Cloud Dataflow,根据《数据流指南》,我创建了这个简单的模板数据流作业示例: public class Runner { public static void main(final String[] args) { final PlaygroundPipelineOptions options = PipelineOptionsFactory.fromArgs(args).withValidation().as(PlaygroundPipelineOptions.class);
public class Runner {
public static void main(final String[] args) {
final PlaygroundPipelineOptions options =
PipelineOptionsFactory.fromArgs(args).withValidation().as(PlaygroundPipelineOptions.class);
options.setRunner(TemplatingDataflowPipelineRunner.class);
options.setZone("***");
options.setNetwork("***");
options.setSubnetwork("***");
options.setStagingLocation("***");
options.setDataflowJobFile("***");
final Pipeline pipeline = Pipeline.create(options);
pipeline
.apply(TextIO.Read.from(options.getInput()).named("TextIO.Read"))
.apply(MapElements.via(new SimpleFunction<String, String>() {
@Override
public String apply(String input) {
return input.toUpperCase();
}
}))
.apply(TextIO.Write.to(options.getOutput()).named("TextIO.Write"));
pipeline.run();
}
private interface PlaygroundPipelineOptions extends DataflowPipelineOptions {
@Description("Input path")
@Validation.Required
ValueProvider<String> getInput();
void setInput(ValueProvider<String> input);
@Description("Output path")
@Validation.Required
ValueProvider<String> getOutput();
void setOutput(ValueProvider<String> input);
}
}
问题在于调用
ValueProvider#get()
时,如何正确地进行模板作业而不出现这些错误?这似乎是源于。由于文件模式在验证期间不可用,解决方案可能会通过调用withoutValidation()
来禁用TextIO
源代码的验证。这正是我作为临时解决方案所做的,但是通过阅读指南和关于模板化作业的内容,sdk应该适当地处理这一问题。一般的问题是ValueProvider#isAccessible()返回false,与ValueProvider#get()抛出异常相同。我相信这可能只是缺少文档。在创建管道模板时运行验证。由于在使用管道模板运行作业之前,filepattern的值不可用,因此在创建模板时无法访问并验证该值。因此出现了错误(应予以澄清)。
Exception in thread "main" java.lang.IllegalStateException: Cannot validate with a filepattern provided at runtime.