2017-06-19 58 views
0

我是Apache Beam的新手,我試圖連接到mysql數據庫的google雲實例。當我運行下面的代碼片段時,它拋出了下面的異常。Apache Beam throws不能setCoder(null):java

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(); 

異常在線程 「主」 java.lang.IllegalArgumentException異常:無法setCoder(空) 在org.apache.beam.sdk.repackaged.com.google.common.base.Preconditions.checkArgument(前提條件。 java:122) at org.apache.beam.sdk.values.PCollection.setCoder(PCollection.java:265) at 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.s中org.apache.beam.sdk.Pipeline.applyTransform(Pipeline.java:422) dk.values.PBegin.apply(PBegin.java:44) at org.apache.beam.sdk.Pipeline.apply(Pipeline.java:164) at com.neudesic.com.GoogleSQLPipeline.main(GoogleSQLPipeline.java: 24)

回答

0

看起來像,我有一些問題與jar文件。我重新創建了工作區和項目。然後相同的代碼運行沒有任何問題。

謝謝