Apache Beam выбрасывает Cannot setCoder(null): java
Я новичок в Apache Beam и пытаюсь подключиться к облачному экземпляру Google базы данных MySQL. Когда я запускаю приведенный ниже фрагмент кода, он выдает приведенное ниже исключение.
Logger logger = LoggerFactory.getLogger(GoogleSQLPipeline.class);
PipelineOptions options = PipelineOptionsFactory.create();
Pipeline dataflowPipeline = Pipeline.create();
dataflowPipeline.apply(JdbcIO.<KV<Integer, String>>read().withCoder(KvCoder.of(VarIntCoder.of(), StringUtf8Coder.of()))
.withDataSourceConfiguration(JdbcIO.DataSourceConfiguration
.create("com.mysql.jdbc.Driver", "jdbc:mysql://<ip from google instance>:3306/foodmart")
.withUsername("root").withPassword("root"))
.withQuery("select accouont_id,account_description from account")
.withRowMapper(new JdbcIO.RowMapper<KV<Integer, String>>() {
@Override
public KV<Integer, String> mapRow(ResultSet resultSet) throws Exception {
// TODO Auto-generated method stub
return KV.of(resultSet.getInt(1), resultSet.getString(2));
}
}));
dataflowPipeline.run();
Исключение в потоке "main" java.lang.IllegalArgumentException: невозможно установить значение Coder(null) в org.apache.beam.sdk.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:122) в org.apache.beam.sdk.values.PCollection.setCoder(PCollection.java:265) в org.apache.beam.sdk.io.jdbc.JdbcIO$Read.expand(JdbcIO.java:325) в org.apache.beam.sdk.io.jdbc.JdbcIO$Read.expand(JdbcIO.java:272) в org.apache.beam.sdk.Pipeline.applyInternal(Pipeline.java:482) в org.apache.beam.sdk.Pipeline.applyTransform(Pipeline.java:422) в org.apache.beam.sdk.values.PBegin.apply(PBegin.java:44) в org.apache.beam.sdk.Pipeline.apply(Pipeline.java:164) в com.neudesic.com.GoogleSQLPipeline.main(GoogleSQLPipeline.java:24)
1 ответ
Похоже, у меня были проблемы с файлами jar. Я воссоздал рабочее пространство и проект. Тогда тот же код работает без каких-либо проблем.
Спасибо