'Python fastavro转换不正确'

2024-06-16 09:33:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难理解在使用fastavro(以及普通avro)来转换avro模式中定义为float的数字时遇到的一个问题。我敢肯定它与数据类型存储有关,我只是不明白。简而言之,我把一张唱片传给fastavro.垃圾场,然后将结果传回快速负载,当值超过~9位数时,到/从的转换不会返回相同的结果。在

import fastavro
from io import BytesIO

schema = {
  'name': 'Person',
  'type': 'record',
  'fields': [
    {'name': 'EmpName', 'type': 'string'},
    {'name': 'ID', 'type': 'float'}]}

origRecord = {'EmpName': 'BillyBob', 'ID': 1111000000}

buf = BytesIO()
fastavro.dump(buf, origRecord, schema)
avroMsg = buf.getvalue()

buf = BytesIO(avroMsg)
afterConversion = fastavro.load(buf, schema)
print(origRecord['ID'])
print(afterConversion['ID'])

输出如下:

^{pr2}$

我希望转换会引入.0,但是这些值实际上发生了变化,这让我很困惑。随着输入值的变化,两者之间的差异也在-63到+64之间变化(这可能表明这里实际发生了什么)。将模式中的类型更改为double/long/int似乎是为了纠正我的测试中的问题。当使用float作为类型时,较小的值不会表现出这种行为。在


Tags: nameimportidschematype模式floatavro