【问题标题】:Apache Beam -BigQueryIO using Apex runnerApache Beam -BigQueryIO 使用 Apex 运行器
【发布时间】:2017-12-20 12:34:48
【问题描述】:

使用 apex/spark runner 将数据写入 Apache Beam 中的表。但是在使用 apex runner 运行程序时遇到异常。

 List<TableFieldSchema> fields = new ArrayList<>();
            fields.add(new TableFieldSchema().setName("Id").setType("STRING"));
            fields.add(new TableFieldSchema().setName("row").setType("STRING"));
            TableSchema schema = new TableSchema().setFields(fields);

PCollection<TableRow> data= pipeline.apply("ReadLines", TextIO.read().from(inputDir + "data.txt"))
        .apply(ParDo.of(new ExtractDataFn()));

data.apply(BigQueryIO.writeTableRows()
                 .to("my-project:output.output_table")
                 .withSchema(schema)
                 .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)
                 .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_EEDED));

static class ExtractDataFn extends DoFn<String, TableRow> {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @ProcessElement
    public void processElement(ProcessContext c) {

        if (c.element() != null) {
            TableRow row = new TableRow().set("Id", c.element().substring(1, 5)).set("row", c.element());
            c.output(row);
        }
    }
}

使用命令mvn compile exec:java ... --runner=ApexRunner" -Papex-runner执行上述程序后,出现以下异常:

 java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:293)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
        at org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO$Write.expand(BigQueryIO.java:1398)
        at org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO$Write.expand(BigQueryIO.java:974)
        at org.apache.beam.sdk.Pipeline.applyInternal(Pipeline.java:525)
        at org.apache.beam.sdk.Pipeline.applyTransform(Pipeline.java:460)
        at org.apache.beam.sdk.values.PCollection.apply(PCollection.java:284)

你能指导我会是什么问题

【问题讨论】:

    标签: apex apache-beam


    【解决方案1】:

    这是一个常见错误,因为您的程序(包括 Beam SDK)和 Apex 运行时环境都包括 Guava,显然版本冲突。典型的答案是,如果可能,您应该更改 Guava 依赖项版本,或者在 Maven 中对其进行遮蔽。

    有关如何处理这些问题的更详细说明,请搜索“java.lang.NoSuchMethodError: com.google.common.base.Preconditions”。

    【讨论】:

      猜你喜欢
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      相关资源
      最近更新 更多