|
|
-
Problems with SortedKeyValueFile.Reader: Generic vs Specific Interface
Jeremy Lewi 2012-12-16, 07:06
HI avro-users,
I'm having issues with SortedKeyValueFile.Reader. Even though the return type of get is a specific record type, the actual instance returned has type GenericRecord. How do I convert this GenericRecord into an instance of my specific record?
Looking at the source code SortedKeyValueFile is using the Generic interface to read the data. But the return type for get is V where I have set V to be a specific record. e.g
SortedKeyValueFile.Reader<CharSequence, GraphNodeData> where GraphNodeData is one of my avro records.
I don't understand how this code compiles since the return type is V=GraphNodeData and a GenericRecord can't be cast to a GraphNodeData.
Thoughts?
Thanks J
+
Jeremy Lewi 2012-12-16, 07:06
-
Re: Problems with SortedKeyValueFile.Reader: Generic vs Specific Interface
Doug Cutting 2012-12-17, 18:31
A GenericDatumReader will never return a specific record. Perhaps this code should use ReflectDatumReader (which will return a java class if the named class is loaded or else GenericRecord). The changes will be deeper, since this builds on AvroKeyValue which also assumes generic, so I can't tell at a glance how difficult this would be.
Doug
On Sat, Dec 15, 2012 at 11:06 PM, Jeremy Lewi <[EMAIL PROTECTED]> wrote: > HI avro-users, > > I'm having issues with SortedKeyValueFile.Reader. Even though the return > type of get is a specific record type, the actual instance returned has type > GenericRecord. How do I convert this GenericRecord into an instance of my > specific record? > > Looking at the source code SortedKeyValueFile is using the Generic interface > to read the data. But the return type for get is V where I have set V to be > a specific record. e.g > > SortedKeyValueFile.Reader<CharSequence, GraphNodeData> where GraphNodeData > is one of my avro records. > > I don't understand how this code compiles since the return type is > V=GraphNodeData and a GenericRecord can't be cast to a GraphNodeData. > > Thoughts? > > Thanks > J
+
Doug Cutting 2012-12-17, 18:31
-
Re: Problems with SortedKeyValueFile.Reader: Generic vs Specific Interface
Jeremy Lewi 2012-12-22, 16:53
Thanks Doug. I worked around it by just encoding it and then redecoding it using specific record.
J On Mon, Dec 17, 2012 at 10:31 AM, Doug Cutting <[EMAIL PROTECTED]> wrote:
> A GenericDatumReader will never return a specific record. Perhaps > this code should use ReflectDatumReader (which will return a java > class if the named class is loaded or else GenericRecord). The > changes will be deeper, since this builds on AvroKeyValue which also > assumes generic, so I can't tell at a glance how difficult this would > be. > > Doug > > On Sat, Dec 15, 2012 at 11:06 PM, Jeremy Lewi <[EMAIL PROTECTED]> wrote: > > HI avro-users, > > > > I'm having issues with SortedKeyValueFile.Reader. Even though the return > > type of get is a specific record type, the actual instance returned has > type > > GenericRecord. How do I convert this GenericRecord into an instance of my > > specific record? > > > > Looking at the source code SortedKeyValueFile is using the Generic > interface > > to read the data. But the return type for get is V where I have set V to > be > > a specific record. e.g > > > > SortedKeyValueFile.Reader<CharSequence, GraphNodeData> where > GraphNodeData > > is one of my avro records. > > > > I don't understand how this code compiles since the return type is > > V=GraphNodeData and a GenericRecord can't be cast to a GraphNodeData. > > > > Thoughts? > > > > Thanks > > J >
+
Jeremy Lewi 2012-12-22, 16:53
|
|