You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by "huangjianhuang (JIRA)" <ji...@apache.org> on 2017/12/22 06:48:00 UTC
[jira] [Created] (BEAM-3390) unable to serialize
org.apache.beam.sdk.io.jdbc.JdbcIO$Read$ReadFn
huangjianhuang created BEAM-3390:
------------------------------------
Summary: unable to serialize org.apache.beam.sdk.io.jdbc.JdbcIO$Read$ReadFn
Key: BEAM-3390
URL: https://issues.apache.org/jira/browse/BEAM-3390
Project: Beam
Issue Type: Bug
Components: dsl-sql
Affects Versions: 2.1.0
Environment: ubuntu 16.04, idea, direct runner
Reporter: huangjianhuang
Assignee: Xu Mingmin
Here is my Demo code:
{code:java}
PipelineOptions options = PipelineOptionsFactory.fromArgs(args).withValidation()
.as(PipelineOptions.class);
Pipeline pipeline = Pipeline.create(options);
pipeline.apply(JdbcIO.<KV<Integer, String>>read()
.withDataSourceConfiguration(JdbcIO.DataSourceConfiguration.create(
"com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3307/libra_stat")
.withUsername("root")
.withPassword("123456"))
.withQuery("select id, game_id from test_tb")
.withCoder(KvCoder.of(BigEndianIntegerCoder.of(), StringUtf8Coder.of()))
.withRowMapper(new JdbcIO.RowMapper<KV<Integer, String>>() {
public KV<Integer, String> mapRow(ResultSet resultSet) throws Exception {
System.out.println(resultSet.getInt(1));
System.out.println(resultSet.getString(2));
return KV.of(resultSet.getInt(1), resultSet.getString(2));
}
})
);
{code}
I run this demo by direct runner and got NotSerializableException as follow:
{code:java}
java.lang.IllegalArgumentException: unable to serialize org.apache.beam.sdk.io.jdbc.JdbcIO$Read$ReadFn@68f4865
at org.apache.beam.sdk.util.SerializableUtils.serializeToByteArray(SerializableUtils.java:53)
at org.apache.beam.sdk.util.SerializableUtils.clone(SerializableUtils.java:90)
at org.apache.beam.sdk.transforms.ParDo$SingleOutput.<init>(ParDo.java:591)
at org.apache.beam.sdk.transforms.ParDo.of(ParDo.java:435)
at org.apache.beam.sdk.io.jdbc.JdbcIO$Read.expand(JdbcIO.java:325)
at org.apache.beam.sdk.io.jdbc.JdbcIO$Read.expand(JdbcIO.java:272)
at org.apache.beam.sdk.Pipeline.applyInternal(Pipeline.java:514)
at org.apache.beam.sdk.Pipeline.applyTransform(Pipeline.java:454)
at org.apache.beam.sdk.values.PBegin.apply(PBegin.java:44)
at org.apache.beam.sdk.Pipeline.apply(Pipeline.java:165)
at com.xiaomi.huyu.processor.demo.SqlDemo.run(SqlDemo.java:30)
at com.xiaomi.huyu.processor.demo.SqlDemo.main(SqlDemo.java:21)
Caused by: java.io.NotSerializableException: com.xiaomi.huyu.processor.demo.SqlDemo
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at org.apache.beam.sdk.util.SerializableUtils.serializeToByteArray(SerializableUtils.java:49)
... 11 more
{code}
Any suggestions and comments are welcome, thanks a lot!
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)