On Sep 24, 2013, at 9:46 PM, Raihan Jamal <[email protected]> wrote:

> Thanks a lot Mika. Yeah, it works now but my second question is- Does the 
> avro schema that I have made looks good as compared to JSON value that we 
> were using previously?
> I thought we can use an array for that so designed like that using an Apache 
> Avro..
> 

This is an application design question, and not related to Avro. If you have a 
list of prices,  array is a good place to store them.

> And also why Avro Array uses java.util.List datatype? Just curious to know on 
> that as well.

Someone who has actually designed Avro can answer this better, but I assume 
that List was chosen because it is much more convenient to use than java 
arrays. You don't need to know the size before hand, etc.

-Mika

> 
> Thanks for the help.
> 
> 
> 
> 
> 
> 
> 
> Raihan Jamal
> 
> 
> On Tue, Sep 24, 2013 at 11:40 AM, Mika Ristimaki <[email protected]> 
> wrote:
> Hi,
> 
> Avro array uses java.util.List datatype. So you must do something like
> 
> List<Double> nums = new ArrayList<Double>();
> nums.add(new Double(9.97));
> .
> .
> 
> On Sep 24, 2013, at 9:02 PM, Raihan Jamal <[email protected]> wrote:
> 
>> Earlier, I was using JSON in our project so one of our attribute data looks 
>> like below in JSON format. Below is the attribute `e3` data in JSON format.
>>      
>>      {"lv":[{"v":{"prc":9.97}},{"v":{"prc":5.56}},{"v":{"prc":21.48}}]}
>>      
>> Now, I am planning to use Apache Avro for our Data Serialization format. So 
>> I decided to design the Avro schema for the above attributes data. And I 
>> came up with the below design.
>>   
>>      {
>>      "namespace": "com.avro.test.AvroExperiment",
>>      "type": "record",
>>      "name": "AVG_PRICE",
>>      "doc": "AVG_PRICE data",
>>      "fields": [
>>          {"name": "prc", "type": {"type": "array", "items": "double"}}
>>      ]
>>     }
>> 
>> Now, I am not sure whether the above schema looks right or not corresponding 
>> to the values I have in JSON? Can anyone help me on that? Assuming the above 
>> schema looks correct, if I try to serialize the data using the above avro 
>> schema, I always get the below error-
>>   
>>      double[] nums = new double[] { 9.97, 5.56, 21.48 };
>>      
>>      Schema schema = new 
>> Parser().parse((AvroExperiment.class.getResourceAsStream("/aspmc.avsc")));
>>      GenericRecord record = new GenericData.Record(schema);
>>      record.put("prc", nums);
>>      
>>      GenericDatumWriter<GenericRecord> writer = new 
>> GenericDatumWriter<GenericRecord>(schema); 
>>      ByteArrayOutputStream os = new ByteArrayOutputStream(); 
>> 
>>      Encoder e = EncoderFactory.get().binaryEncoder(os, null);
>>      
>>      // this line gives me exception..
>>      writer.write(record, e); 
>>      
>> Below is the exception, I always get-
>> 
>>     Exception in thread "main" java.lang.ClassCastException: [D incompatible 
>> with java.util.Collection
>>      
>> Any idea what wrong I am doing here?
> 
> 

Reply via email to