Недавно я обновил существующий конвейер с потока данных 1.x до потока данных 2.x и вижу ошибку, которая не имеет для меня смысла. Я помещу соответствующий код ниже, а затем включу обнаруженную ошибку.
// This is essentially the final step in our pipeline, where we write
// one of the side outputs from the pipeline to a BigQuery table
results.get(matchedTag)
.apply("CountBackfill", Count.<String>perElement())
.apply("ToReportRow", ParDo.of(new ToReportRow()))
// at this point, there is now a PCollection<TableRow>
.apply("WriteReport", BigQueryIO.writeTableRows()
.to(reportingDataset + ".AttributeBackfill_" + dayStr)
.withSchema(ReportSchema.get())
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_TRUNCATE)
.withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED));
/*
* Create a TableRow from a key/value pair
*/
public static class ToReportRow extends DoFn<KV<String, Long>, TableRow> {
private static final long serialVersionUID = 1L;
@ProcessElement
public void processElement(ProcessContext c) throws InterruptedException {
KV<String, Long> row = c.element();
c.output(new TableRow()
.set(ReportSchema.ID, row.getKey())
.set(ReportSchema.COUNT, row.getValue()));
}
}
И вот ошибка, которую я вижу:
Исключение в потоке "main" 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:1426) в org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO $ Write.expand (BigQueryIO.java:989) в org .apache.beam.sdk.Pipeline.applyInternal (Pipeline.java:525) в org.apache.beam.sdk.Pipeline.applyTransform (Pipeline.java:479) в org.apache.beam.sdk.values.PCollection.apply (PCollection.java:297) в com.prod.merge.DailyUniqueProfiles.buildPipeline (DUP.java:106) в com.prod.merge.MergePipeline.main (MergePipeline.java:91)
Строка .apply("WriteReport", BigQueryIO.writeTableRows()
- это строка 106 в DUP.java
, так что я подозреваю, что эта строка в чем-то неверна.
Есть идеи о том, в чем может быть проблема?
2 ответа
Решение этой проблемы оказалось в зависимостях maven. После добавления следующей зависимости и перекомпиляции с mvn
ошибка исчезла.
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>22.0</version>
</dependency>
Похоже, что более старая версия гуавы втягивается транзитивной зависимостью. Ниже меняются изменения в зависимостях.
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-bigquery</artifactId>
<version>v2-rev295-1.22.0</version>
<exclusions>
<!-- Exclude an old version of guava that is being pulled in by a transitive dependency of google-api-client -->
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava-jdk5</artifactId>
</exclusion>
</exclusions>
</dependency>
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].