首页 > 编程语言 >python avro 数据格式使用demo

python avro 数据格式使用demo

时间:2023-05-31 12:04:28浏览次数:38  
标签:12 04 python type 09 avro 数据格式 procedures procedure

{"name": "UEProcedures",
 "type": "record",
 "fields": [
     {"name": "imsi", "type": "string"},
     {"name": "time_at", "type": "string"},
     {"name": "procedures", "type": {"type": "array", "items": {
	      "type": "record",
	      "name": "SignalProcedure",
	      "fields" : [
	      {"name": "timestamp", "type": "string"},
	      {"name": "procedure_tag", "type": "string"}
	      ]
         }}
     }
 ]
}

 ue_procedure.avsc数据格式说明,python3 下的示例代码:

 

import avro.schema
from avro.datafile import DataFileReader, DataFileWriter
from avro.io import DatumReader, DatumWriter

schema = avro.schema.Parse(open('ue_procedure.avsc', "r").read())

writer = DataFileWriter(open("ue_procedures.avro", "wb"), DatumWriter(), schema)
writer.append({"imsi": "UE001", "time_at": "2018-04-09 12:15", "procedures": [{"timestamp": "2019-04-09 12:01", "procedure_tag": "A"}, {"timestamp": "2019-04-09 12:02", "procedure_tag": "B"}]})
writer.append({"imsi": "UE002", "time_at": "2018-04-09 12:15", "procedures": [{"timestamp": "2019-04-09 12:01", "procedure_tag": "A"}, {"timestamp": "2019-04-09 12:02", "procedure_tag": "B"}]})
writer.close()

reader = DataFileReader(open("ue_procedures.avro", "rb"), DatumReader())
for ue in reader:
    print(ue)
reader.close()

 输出:

{'imsi': 'UE001', 'time_at': '2018-04-09 12:15', 'procedures': [{'timestamp': '2019-04-09 12:01', 'procedure_tag': 'A'}, {'timestamp': '2019-04-09 12:02', 'procedure_tag': 'B'}]}
{'imsi': 'UE002', 'time_at': '2018-04-09 12:15', 'procedures': [{'timestamp': '2019-04-09 12:01', 'procedure_tag': 'A'}, {'timestamp': '2019-04-09 12:02', 'procedure_tag': 'B'}]}

另外使用map的示例:

{"name": "UEStat",
 "type": "record",
 "fields": [
     {"name": "imsi", "type": "string"},
     {"name": "time_at", "type": "string"},
     {"name": "procedures_total_cnt", "type": "long"},
     {"name": "is_over15_time_detach_minus_attach", "type": "boolean"},
     {"name": "detail_procedures_cnt", "type": {"type": "map", "values": "long"}}
 ]
}
import avro.schema
from avro.datafile import DataFileReader, DataFileWriter
from avro.io import DatumReader, DatumWriter

schema = avro.schema.Parse(open('chr_ue_stat.avsc', "r").read())

writer = DataFileWriter(open("chr_ue_stat.avro", "wb"), DatumWriter(), schema)
writer.append({"imsi": "UE001", "time_at": "2018-04-09 12:15", "is_over15_time_detach_minus_attach": True, "procedures_total_cnt":789, "detail_procedures_cnt": {"A": 123, "B": 342}})
writer.append({"imsi": "UE002", "time_at": "2018-04-09 12:15", "is_over15_time_detach_minus_attach": False, "procedures_total_cnt": 876, "detail_procedures_cnt": {"C":1123, "D": 313}})
writer.close()

reader = DataFileReader(open("ue_procedures.avro", "rb"), DatumReader())
for ue in reader:
    print(ue)
reader.close()

 输出:

{'imsi': 'UE001', 'time_at': '2018-04-09 12:15', 'procedures': [{'timestamp': '2019-04-09 12:01', 'procedure_tag': 'A'}, {'timestamp': '2019-04-09 12:02', 'procedure_tag': 'B'}]}
{'imsi': 'UE002', 'time_at': '2018-04-09 12:15', 'procedures': [{'timestamp': '2019-04-09 12:01', 'procedure_tag': 'A'}, {'timestamp': '2019-04-09 12:02', 'procedure_tag': 'B'}]}

  

 

参考:https://avro.apache.org/docs/1.8.2/gettingstartedpython.html 

标签:12,04,python,type,09,avro,数据格式,procedures,procedure
From: https://blog.51cto.com/u_11908275/6385847

相关文章

  • 【Python-Scripts】自动删除Jenkins任务构建历史记录
    任务背景: Jenkins构建历史记录很多,占用服务器磁盘空间较大,根据开发需求定期删除历史记录。 1#!/usr/bin/envpython2#-*-coding:utf-8-*-345importdatetime6importjenkins7importtime8fromjenkinsapi.jenkinsimportJenkins91011def......
  • < Python全景系列-9 > Python 装饰器:优雅地增强你的函数和类
    欢迎来到我们的系列博客《Python全景系列》第九篇!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系列都将提供你需要的知识和技能。**装饰器在Python中扮演了重要的角......
  • python计算IRR公式
    Python计算IRR公式fromscipyimportoptimize#计算现值defxnpv(rate,cashflows):returnsum([cf/(1+rate)**((t-cashflows[0][0]).days/365.0)for(t,cf)incashflows])#计算xirrdefxirr(cashflows,guess=.01):try:returnoptimize.n......
  • python的peft包导入PeftModel时报importerror-cannot-import-name-unknown-location
    一般出现这种问题的原因是该版本的peft包中没有PeftModel,这种情况都需要降级。我验证了以下,我实在alpaca-lora项目中使用peft,alpaca-lora的项目大概在2个月以前更新,而peft包实在最近更新的4.0版本,而2个月以前peft还是2.0版本,所以我果断把peft降到2.0版本,然后问题就解决了。......
  • Python的分布式网络爬虫
    分布式爬虫其实就是指利用多台计算机分布式地从互联网上采集数据的一种爬虫。它可以把大规模的任务分解成若干小规模的,由多台计算机并行进行处理,大大提高了效率和速度。分布式爬虫有很多优势:解决单机爬虫效率低的问题,分布式爬虫可以将任务分配给多个节点并行处理,大大提高了效率和......
  • Python抽象类
    Python抽象类python没有接口类型,因为python是动态类型的语言,像接口这种轻耦合的东西在python中随处都是,例如内置的魔法方法等,甚至可以说在python这种天马行空的语言中接口显的反而有点清秀。不过Python还是提供了像java中那样的抽象类定义方法,某些时候还是有用的,顾名思义抽象类......
  • python~发布自己的py组件
    你使用python写的东西,想让其它人直接使用,可以像java,.net一样,发到包管理平台即可,在python中,你可以使用twine这个工具来实现发布,就像.net里的nuget,java里的mvndeploy一样。本地自己用添加一个hello.py的文件,里面有个say方法,打印字符importsysdefsay(to):print('hel......
  • centos7 安装python3.8.16
    升级openssl下载opensslopenssl官方下载地址:https://www.openssl.org/source/wgethttps://github.com/openssl/openssl/archive/OpenSSL_1_1_1d.tar.gz解压tar-zxvfOpenSSL_1_1_1d.tar.gz编译安装进入openssl-OpenSSL_1_1_1dcdopenssl-OpenSSL_1_1_1d指定安装......
  • python为什么要使用闭包
    为什么要使用闭包闭包避免了使用全局变量,此外,闭包允许将函数与其所操作的某些数据(环境)关连起来。这一点与面向对象编程是非常类似的,在面对象编程中,对象允许我们将某些数据(对象的属性)与一个或者多个方法相关联。一般来说,当对象中只有一个方法时,这时使用闭包是更好的选择。来看一个例......
  • python dijkstra 最短路算法示意代码
     defdijkstra(graph,from_node,to_node):q,seen=[(0,from_node,[])],set()whileq:cost,node,path=heappop(q)seen.add(node)path=path+[node]ifnode==to_node:returncost,pathfora......