【发布时间】:2018-09-10 18:20:05
【问题描述】:
我正在尝试传递 BigTable tableId、instanceId 和 projectId,它们在执行时在 TemplateOption 类中定义为 ValueProvider,因为它们是运行时值,但它们不会得到新值的认可。管道使用构建管道时定义的旧值执行。我应该进行哪些更改以使其在运行时尊重值?
Pipeline p = Pipeline.create(options);
com.google.cloud.bigtable.config.BigtableOptions.Builder optionsBuilder =
new com.google.cloud.bigtable.config.BigtableOptions.Builder().
setProjectId("my-project");
PCollection<com.google.bigtable.v2.Row> row = p.apply("filtered read", org.apache.beam.sdk.io.gcp.bigtable.BigtableIO.read().withBigtableOptions(optionsBuilder).withoutValidation().withInstanceId(options.getInstanceId()).withProjectId(options.getProjectId()).withTableId(options.getTableId()));
PCollection<KV<Integer,String>> convertToKV = row.apply(ParDo.of(new ConvertToKV()));
我的 Option 类看起来像:--
@Default.String("my-project")
@Description("The Google Cloud project ID for the Cloud Bigtable instance.")
ValueProvider<String> getProjectId();
void setProjectId(ValueProvider<String> projectId);
@Default.String("my-instance")
@Description("The Google Cloud Bigtable instance ID .")
ValueProvider<String> getInstanceId();
void setInstanceId(ValueProvider<String> instanceId);
@Default.String("my-test")
@Description("The Cloud Bigtable table ID in the instance." )
ValueProvider<String> getTableId();
void setTableId(ValueProvider<String> tableId);
@Description("bucket name")
@Default.String("mybucket")
ValueProvider<String> getBucketName();
void setBucketName(ValueProvider<String> bucketName);
任何帮助将不胜感激。
【问题讨论】:
-
不要在构建时指定值。施工时指定的内容,保持在指定的内容;未指定的内容将在运行时取值。
-
如果我没有指定 ValueProvider 类型的 tableId、instanceId 和 projectId 的值,则会在构造时引发错误...这是我得到的错误...。由:java.lang.IllegalArgumentException:在 org.apache.beam.sdk.io.gcp.bigtable.BigtableIO$BigtableSource.validate 的 com.google.common.base.Preconditions.checkArgument(Preconditions.java:122) 中未提供 tableId (BigtableIO.java:995) 在 org.apache.beam.sdk.io.Read$Bounded.expand(Read.java:98)
-
这是我用来构造的... mvn -X compile exec:java -Dexec.mainClass=com.grid.GridProcessingPipeline -Dexec.args="--runner=DataflowRunner --project =my-project --stagingLocation=gs://my-bucket/staging --tempLocation=gs://my-bucket/temp/ --templateLocation=gs://my-bucket/templates/MyTemplate"
-
啊。这是 BigtableIO 中的一个错误。您介意在issues.apache.org/jira/browse/BEAM 提交 JIRA 或通过电子邮件发送给 user@beam.apache.org 邮件列表吗?
标签: google-cloud-dataflow apache-beam google-cloud-bigtable