You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@avro.apache.org by Павел Мезенцев <pa...@mezentsev.org> on 2013/05/24 15:45:51 UTC

avro-1.7.4 for python throws exception on Windows server 2008

Hello, friends!

I am newbie in avro and try to put my data into this container. But it is
failing with exception.
I found that code like that:

# -*- coding: utf-8 -*-
from avro import schema
from avro import io
from avro import datafile

schema_object = schema.parse (u"""{
      "type": "record",
      "name": "unicode_values",
      "fields": [ { "name": "value", "type": "string"}]
    }""")

dfw = datafile.DataFileWriter (open ("test.avro", "wb"), io.DatumWriter (),
schema_object)
dfw.append ({u"value" : u"95/44"})
dfw.append ({u"value" : u"238"})
dfw.append ({u"value" : u"103/20"})
dfw.append ({u"value" : u"117"})
dfw.append ({u"value" : u"936"})
dfw.append ({u"value" : u"226/407"})
dfw.append ({u"value" : u"217/43"})
dfw.append ({u"value" : u"45/4"})
dfw.append ({u"value" : u"654"})
dfw.append ({u"value" : u"217/23"})
dfw.append ({u"value" : u"1022200571470"})
dfw.close ()

# =======================
reader = datafile.DataFileReader (open ("test.avro", "r"), io.DatumReader())
for value in reader:
    print value
reader.close ()


failing with exception
Traceback (most recent call last):
  File "sandbox/write_avro.py", line 28, in <module>
    for value in reader:
  File
"C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\datafile.py", line
362, in next
    datum = self.datum_reader.read(self.datum_decoder)
  File "C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\io.py",
line 445, in read
    return self.read_data(self.writers_schema, self.readers_schema, decoder)
  File "C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\io.py",
line 490, in read_data
    return self.read_record(writers_schema, readers_schema, decoder)
  File "C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\io.py",
line 690, in read_record
    field_val = self.read_data(field.type, readers_field.type, decoder)
  File "C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\io.py",
line 468, in read_data
    return decoder.read_utf8()
  File "C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\io.py",
line 233, in read_utf8
    return unicode(self.read_bytes(), "utf-8")
  File "C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\io.py",
line 226, in read_bytes
    return self.read(self.read_long())
  File "C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\io.py",
line 184, in read_long
    b = ord(self.read(1))
TypeError: ord() expected a character, but string of length 0 found


Tell me, what i do wrong?
Is there any workaround to avoid this exception?


Best regards,
Mezentsev Pavel

Re: avro-1.7.4 for python throws exception on Windows server 2008

Posted by Miki Tebeka <mi...@gmail.com>.
IMO the file you're writing to didn't flush.
Try either closing the file explicitly or (better) use "with"

    with open("test.avro", "w") as out:
        dfw = datafile.DataFileWriter (out, io.DatumWriter (),
schema_object)
        dfw.append ({u"value" : u"95/44"})



On Fri, May 24, 2013 at 6:45 AM, Павел Мезенцев <pa...@mezentsev.org> wrote:

> Hello, friends!
>
> I am newbie in avro and try to put my data into this container. But it is
> failing with exception.
> I found that code like that:
>
> # -*- coding: utf-8 -*-
> from avro import schema
> from avro import io
> from avro import datafile
>
> schema_object = schema.parse (u"""{
>       "type": "record",
>       "name": "unicode_values",
>       "fields": [ { "name": "value", "type": "string"}]
>     }""")
>
> dfw = datafile.DataFileWriter (open ("test.avro", "wb"), io.DatumWriter
> (), schema_object)
> dfw.append ({u"value" : u"95/44"})
> dfw.append ({u"value" : u"238"})
> dfw.append ({u"value" : u"103/20"})
> dfw.append ({u"value" : u"117"})
> dfw.append ({u"value" : u"936"})
> dfw.append ({u"value" : u"226/407"})
> dfw.append ({u"value" : u"217/43"})
> dfw.append ({u"value" : u"45/4"})
> dfw.append ({u"value" : u"654"})
> dfw.append ({u"value" : u"217/23"})
> dfw.append ({u"value" : u"1022200571470"})
> dfw.close ()
>
> # =======================
> reader = datafile.DataFileReader (open ("test.avro", "r"),
> io.DatumReader())
> for value in reader:
>     print value
> reader.close ()
>
>
> failing with exception
> Traceback (most recent call last):
>   File "sandbox/write_avro.py", line 28, in <module>
>     for value in reader:
>   File
> "C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\datafile.py", line
> 362, in next
>     datum = self.datum_reader.read(self.datum_decoder)
>   File "C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\io.py",
> line 445, in read
>     return self.read_data(self.writers_schema, self.readers_schema,
> decoder)
>   File "C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\io.py",
> line 490, in read_data
>     return self.read_record(writers_schema, readers_schema, decoder)
>   File "C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\io.py",
> line 690, in read_record
>     field_val = self.read_data(field.type, readers_field.type, decoder)
>   File "C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\io.py",
> line 468, in read_data
>     return decoder.read_utf8()
>   File "C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\io.py",
> line 233, in read_utf8
>     return unicode(self.read_bytes(), "utf-8")
>   File "C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\io.py",
> line 226, in read_bytes
>     return self.read(self.read_long())
>   File "C:\Anaconda\lib\site-packages\avro-1.7.4-py2.7.egg\avro\io.py",
> line 184, in read_long
>     b = ord(self.read(1))
> TypeError: ord() expected a character, but string of length 0 found
>
>
> Tell me, what i do wrong?
> Is there any workaround to avoid this exception?
>
>
> Best regards,
> Mezentsev Pavel
>