Home | About | Sematext search-lucene.com search-hadoop.com
 Search Hadoop and all its subprojects:

Switch to Threaded View
Avro >> mail # user >> Make a copy of an avro record


Copy link to this message
-
Re: Make a copy of an avro record
GenericData.deepCopy gives me an instance of GenericData.Record. How do I
convert this to an instance of my specific data (e.g GraphNodeData).

It looks like the issue with the @override statement for the build might
have something to do with the fact that the specification for @Override
changed in jdk1.6 (see this post)
http://stackoverflow.com/questions/2335655/why-is-javac-failing-on-override-annotation.
 However, I'm using java version 1.6.0_27 so I'm not sure why its not
working for me.

To clarify, the statement
GraphNodeData copy = GraphNodeData.newBuilder(this.data).build()
Compiles fine, but generates a runtime warning
The method build() of type GraphNodeData.Builder must override a superclass
method

J

On Sun, Mar 11, 2012 at 7:37 PM, Jeremy Lewi <[EMAIL PROTECTED]> wrote:

> Thanks.
>
> J
>
>
> On Sun, Mar 11, 2012 at 6:20 PM, James Baldassari <[EMAIL PROTECTED]>wrote:
>
>> GenericData is a singleton.  You can use the static method
>> GenericData#get() to obtain the singleton instance:
>>
>>
>> http://avro.apache.org/docs/current/api/java/org/apache/avro/generic/GenericData.html#get()
>>
>> -James
>>
>>
>> On Sun, Mar 11, 2012 at 5:22 PM, Jeremy Lewi <[EMAIL PROTECTED]> wrote:
>>
>>> Yes. How do I instantiate an instance of GenericData though? It looks
>>> like its constructors are protected.
>>>
>>> Thanks
>>> J
>>>
>>>
>>> On Sun, Mar 11, 2012 at 1:52 PM, <[EMAIL PROTECTED]> wrote:
>>>
>>>> There is deepcopy method on genericdata I think
>>>>
>>>> I used it to create deep copies of the avro data
>>>>
>>>> Sent from my iPhone
>>>>
>>>> On Mar 11, 2012, at 3:40 PM, Jeremy Lewi <[EMAIL PROTECTED]> wrote:
>>>>
>>>> > Hi,
>>>> >
>>>> > In java, I'd like to make a deep copy of an avro record.
>>>> >
>>>> > Looking at the code that the avro compiler generates it looks like
>>>> the way to do this for records of type GraphNodeData
>>>> > would be
>>>> > GraphNodeData copy = GraphNodeData.newBuilder(existing_value).build();
>>>> >
>>>> > where GraphNodeData is the name of my avro record.
>>>> >
>>>> > Unfortunately, this generates a compile time error because
>>>> > the method GraphNodeData.build  is decorated with "@Override" but it
>>>> apparently does not override any method.
>>>> > Deleting "@Override" makes the code work. Unfortunately, I would have
>>>> to do this every time I regenerated my avro classes from the schema.
>>>> >
>>>> > Am I doing something wrong or should I file a bug?
>>>> >
>>>> > Thanks
>>>> > J
>>>>
>>>
>>>
>>
>