Thanks. This does sound like a bug and this code path was added recently. Created https://issues.apache.org/jira/browse/BEAM-9790.
Thanks, Cham On Fri, Apr 17, 2020 at 3:03 PM Joshua Bassett <he...@joshbassett.info> wrote: > org.apache.beam.sdk.Pipeline$PipelineExecutionException: > java.lang.ClassCastException: java.lang.String cannot be cast to > java.util.Map > at > org.apache.beam.runners.direct.DirectRunner$DirectPipelineResult.waitUntilFinish > (DirectRunner.java:348) > at > org.apache.beam.runners.direct.DirectRunner$DirectPipelineResult.waitUntilFinish > (DirectRunner.java:318) > at org.apache.beam.runners.direct.DirectRunner.run (DirectRunner.java:213) > at org.apache.beam.runners.direct.DirectRunner.run (DirectRunner.java:67) > at org.apache.beam.sdk.Pipeline.run (Pipeline.java:317) > at org.apache.beam.sdk.Pipeline.run (Pipeline.java:303) > at com.theconversation.data.TopArticlesEnriched.main > (TopArticlesEnriched.java:181) > at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) > at sun.reflect.NativeMethodAccessorImpl.invoke > (NativeMethodAccessorImpl.java:62) > at sun.reflect.DelegatingMethodAccessorImpl.invoke > (DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke (Method.java:498) > at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:282) > at java.lang.Thread.run (Thread.java:748) > Caused by: java.lang.ClassCastException: java.lang.String cannot be cast > to java.util.Map > at > org.apache.beam.sdk.io.gcp.bigquery.BigQueryUtils.lambda$toBeamValue$12 > (BigQueryUtils.java:528) > at java.util.stream.ReferencePipeline$3$1.accept > (ReferencePipeline.java:193) > at java.util.ArrayList$ArrayListSpliterator.forEachRemaining > (ArrayList.java:1382) > at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:482) > at java.util.stream.AbstractPipeline.wrapAndCopyInto > (AbstractPipeline.java:472) > at java.util.stream.ReduceOps$ReduceOp.evaluateSequential > (ReduceOps.java:708) > at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234) > at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:566) > at org.apache.beam.sdk.io.gcp.bigquery.BigQueryUtils.toBeamValue > (BigQueryUtils.java:530) > at org.apache.beam.sdk.io.gcp.bigquery.BigQueryUtils.toBeamRowFieldValue > (BigQueryUtils.java:491) > at org.apache.beam.sdk.io.gcp.bigquery.BigQueryUtils.lambda$toBeamRow$6 > (BigQueryUtils.java:477) > at java.util.stream.ReferencePipeline$3$1.accept > (ReferencePipeline.java:193) > at java.util.ArrayList$ArrayListSpliterator.forEachRemaining > (ArrayList.java:1382) > at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:482) > at java.util.stream.AbstractPipeline.wrapAndCopyInto > (AbstractPipeline.java:472) > at java.util.stream.ReduceOps$ReduceOp.evaluateSequential > (ReduceOps.java:708) > at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234) > at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:566) > at org.apache.beam.sdk.io.gcp.bigquery.BigQueryUtils.toBeamRow > (BigQueryUtils.java:478) > at > org.apache.beam.sdk.io.gcp.bigquery.BigQueryUtils.lambda$static$9bc3d4b2$1 > (BigQueryUtils.java:341) > at org.apache.beam.sdk.schemas.SchemaCoder.encode (SchemaCoder.java:166) > at org.apache.beam.sdk.coders.Coder.encode (Coder.java:136) > at org.apache.beam.sdk.util.CoderUtils.encodeToSafeStream > (CoderUtils.java:82) > at org.apache.beam.sdk.util.CoderUtils.encodeToByteArray > (CoderUtils.java:66) > at org.apache.beam.sdk.util.CoderUtils.encodeToByteArray > (CoderUtils.java:51) > at org.apache.beam.sdk.util.CoderUtils.clone (CoderUtils.java:141) > at > org.apache.beam.sdk.util.MutationDetectors$CodedValueMutationDetector.<init> > (MutationDetectors.java:115) > at org.apache.beam.sdk.util.MutationDetectors.forValueWithCoder > (MutationDetectors.java:46) > at > org.apache.beam.runners.direct.ImmutabilityCheckingBundleFactory$ImmutabilityEnforcingBundle.add > (ImmutabilityCheckingBundleFactory.java:112) > at > org.apache.beam.runners.direct.ParDoEvaluator$BundleOutputManager.output > (ParDoEvaluator.java:299) > at > org.apache.beam.repackaged.direct_java.runners.core.SimpleDoFnRunner.outputWindowedValue > (SimpleDoFnRunner.java:258) > at > org.apache.beam.repackaged.direct_java.runners.core.SimpleDoFnRunner.access$700 > (SimpleDoFnRunner.java:78) > at > org.apache.beam.repackaged.direct_java.runners.core.SimpleDoFnRunner$DoFnProcessContext.output > (SimpleDoFnRunner.java:627) > at > org.apache.beam.repackaged.direct_java.runners.core.SimpleDoFnRunner$DoFnProcessContext.output > (SimpleDoFnRunner.java:615) > at > org.apache.beam.sdk.io.gcp.bigquery.PassThroughThenCleanup$IdentityFn.processElement > (PassThroughThenCleanup.java:83) > > On Sat, 18 Apr 2020, at 12:59 AM, Chamikara Jayalath wrote: > > Do you have the full stack trace ? > > Also, does readTableRows() work for you (without using schemas) ? > > > > On Fri, Apr 17, 2020 at 3:44 AM Joshua Bassett <he...@joshbassett.info> > wrote: > >> Hi there > >> > >> I'm trying to read rows from a BigQuery table that contains a repeated > field into POJOs. Unfortunately, I'm running into issues and I can't figure > it out. > >> > >> I have something like this: > >> > >> @DefaultSchema(JavaFieldSchema.class) > >> class Article implements Serializable { > >> public Long id; > >> public String title; > >> @SchemaFieldName("author_ids") > >> public Long[] authorIds; > >> } > >> > >> PCollection<Article> articles = pipeline > >> .apply( > >> BigQueryIO > >> .readTableRowsWithSchema() > >> .from("myproject:data_warehouse.articles") > >> ) > >> .apply(Convert.to(Article.class)); > >> > >> The schema looks like this: > >> > >> [ > >> { > >> "mode": "NULLABLE", > >> "name": "id", > >> "type": "INTEGER" > >> }, > >> { > >> "mode": "NULLABLE", > >> "name": "title", > >> "type": "STRING" > >> }, > >> { > >> "mode": "REPEATED", > >> "name": "author_ids", > >> "type": "INTEGER" > >> } > >> ] > >> > >> When I run the pipeline, I end up with the following exception: > >> > >> java.lang.ClassCastException: java.lang.String cannot be cast to > java.util.Map > >> > >> Should this be possible? Strangely, when I remove the repeated field > from the schema/POJO it works perfectly. > >> > >> I'm using Beam SDK 2.19.0 with the direct runner. Any help would be > much appreciated. > >> > >> Josh >