Thank you Reuven for the response!

I'll update the design doc to include adding support for the generic
classes. As for the new reflection API that's what I propose in the doc as
well, it seems like the right choice.

By codegen path you mean using bytebuddy to generate the constructor and
the getters? I was going to follow the existing code just as you suggest,
including the codegen path (generally extending the
GetterBasedSchemaProvider) - should I explicitly add a paragraph or two
about the code generation to my doc?

Thanks,
Maciej

On Mon, Apr 15, 2024 at 7:20 PM Reuven Lax <re...@google.com> wrote:

> Some initial thoughts:
>
> Making schema inference handle generic classes would be a nice improvement
> - users occasionally bump into this restriction, and there's no reason not
> to improve it.
>
> I would recommend using the new Java reflection APIs (i.e.
> getRecordComponents) to directly infer the schema. I think we'll end up
> with less error-prone code that way.
>
> We should still use the codegen path for generating efficient Row objects
> here, otherwise Record classes will end up being significantly less
> efficient than regular Java objects. Since I believe that Record classes
> expand out into normal classes, we should be able to reuse the existing
> code (i.e. JavaFieldSchema.java and PojotUtils.java) with maybe some small
> modifications.
>
> On Mon, Apr 15, 2024 at 8:03 AM Maciej Szwaja via dev <dev@beam.apache.org>
> wrote:
>
>> Hi team,
>>
>> I'd like to propose a new java sdk extension feature, which is adding
>> support for java record schema inference - see the design doc here:
>> https://docs.google.com/document/d/1zSQ9cnqtVM8ttJEuHBDE6hw4qjUuJy1dpZWB6IBTuOs/edit?usp=sharing
>>
>> In short - adding this extension's jar to the classpath would enable
>> users to use java 17 record classes as elements of the PCollections simply
>> by annotating them with DefaultSchema annotation (pointing to the new
>> RecordSchema provider) similarly to how it's currently possible with
>> JavaBean or AutoValue classes.
>>
>> Let me know what you think, there's already an open feature request
>> created last year (https://github.com/apache/beam/issues/27802), I
>> could simply take it and start working on it if the proposal gets approved
>>
>> Thanks,
>> Maciej
>>
>

Reply via email to