当我在eclipse中运行我的管道时它运行正常。但是当我将管道输出为jar文件并运行时,我得到以下错误:
线程“main”中的异常java.lang.IllegalStateException:无法执行 返回ToTableRow / ParMultiDo(ToTableRow).out0的默认编码器 [PCollection]。纠正以下根本原因之一:No Coder 已手动指定;你可以使用.setCoder()来做到这一点 从CoderRegistry推断编码器失败:无法提供 编辑com.google.api.services.bigquery.model.TableRow。建造 使用注册CoderProvider的编码器失败。见抑制 详细故障的例外情况。使用默认输出编码器 从生产PTransform失败:无法提供编码器 com.google.api.services.bigquery.model.TableRow。建立一个编码器 使用注册的CoderProvider失败。请参阅抑制异常 详细的失败。 在org.apache.beam.sdk.repackaged.com.google.common.base.Preconditions.checkState(Preconditions.java:444) 在org.apache.beam.sdk.values.PCollection.getCoder(PCollection.java:257) 在org.apache.beam.sdk.values.PCollection.finishSpecifying(PCollection.java:106) at org.apache.beam.sdk.runners.TransformHierarchy.finishSpecifyingInput(TransformHierarchy.java:147) 在org.apache.beam.sdk.Pipeline.applyInternal(Pipeline.java:513) 在org.apache.beam.sdk.Pipeline.applyTransform(Pipeline.java:473) 在org.apache.beam.sdk.values.PCollection.apply(PCollection.java:297) 在com.X.pubsub.to.bq.Y.main(Y.java:107)
在我的代码的第107行,我正在执行BigQueryIO.writeTableRows
:
PCollection<TableRow> tableRow = streamData.apply("ToTableRow",ParDo.of(new PrepData.ToTableRow())); //String to TableRow
tableRow.apply("WriteToBQ",
BigQueryIO.writeTableRows()
.to(String.format("%1$s.%2$s",bqDataSet, bqTable))
.withSchema(schema)
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND));