So it's correct implementation of TableRow that encode(decode(a)) != a?

On Wed, 8 Jul 2020 at 19:03, Jeff Klukas <jklu...@mozilla.com> wrote:

> The test runner intentionally does some ugly things in order to expose
> problems which might otherwise be missed. In particular, I believe the test
> runner enforces coding between each transform and scrambles order of
> elements whereas production pipelines will often have many transforms fused
> together without serializing data.
>
> > I've tried TableRowJsonCoder, but seems like it converts all object
> inside TableRow to LinkedHashMaps
>
> This is likely intended. I would expect only the top-level container to be
> a TableRow and that nested maps would be some other map type.
>
> On Wed, Jul 8, 2020 at 10:52 AM Kirill Zhdanovich <kzhdanov...@gmail.com>
> wrote:
>
>> Hi Jeff,
>> It's a simple pipeline that takes PCollection of TableRow which is
>> selected from Google Analytics export to BigQuery. So each TableRow follows
>> this scheme https://support.google.com/analytics/answer/3437719?hl=en
>> I have part of the code doing casting to TableRow like this:
>>
>> Boolean isMobile = (Boolean) (((TableRow) 
>> row.get("device")).get("isMobile"));
>>
>> or
>>
>> List<Hit> hits = ((List<TableRow>) 
>> row.get("hits")).stream().map(Hit::new).collect(Collectors.toList());
>>
>> I don't have issues running this pipeline in production. I have this
>> issue, only when I tried to write end to end test.
>> Do you know if there are existing coders for TableRow that I can
>> use? I've tried TableRowJsonCoder, but seems like it converts all object
>> inside TableRow to LinkedHashMaps
>>
>> On Wed, 8 Jul 2020 at 17:30, Jeff Klukas <jklu...@mozilla.com> wrote:
>>
>>> Kirill - Can you tell us more about what Job.runJob is doing? I would
>>> not expect the Beam SDK itself to do any casting to TableRow, so is there a
>>> line in your code where you're explicitly casting to TableRow? There may be
>>> a point where you need to explicitly set the coder on a PCollection to
>>> deserialize back to TableRow objects.
>>>
>>> On Wed, Jul 8, 2020 at 10:11 AM Kirill Zhdanovich <kzhdanov...@gmail.com>
>>> wrote:
>>>
>>>> Here is a code example:
>>>>
>>>> List<TableRow> ss = Arrays.asList(session1, session2);
>>>> PCollection<TableRow> sessions = p.apply(Create.of(ss));
>>>> PCollection<MetricsWithDimension> res = Job.runJob(sessions, "20200614", 
>>>> false, new ProductCatalog());
>>>> p.run();
>>>>
>>>>
>>>> On Wed, 8 Jul 2020 at 17:07, Kirill Zhdanovich <kzhdanov...@gmail.com>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>> I want to test pipeline and the input for it is PCollection of
>>>>> TableRows. I've created a test, and when I run it I get an error:
>>>>>
>>>>> java.lang.ClassCastException: class java.util.LinkedHashMap cannot be
>>>>> cast to class com.google.api.services.bigquery.model.TableRow
>>>>>
>>>>> Is it a known issue? Thank you in advance
>>>>>
>>>>> --
>>>>> Best Regards,
>>>>> Kirill
>>>>>
>>>>
>>>>
>>>> --
>>>> Best Regards,
>>>> Kirill
>>>>
>>>
>>
>> --
>> Best Regards,
>> Kirill
>>
>

-- 
Best Regards,
Kirill

Reply via email to