如何用Python定义Schema并生成Parquet文件
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇文章给大家分享的是有关如何用Python定义Schema并生成Parquet文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、简
千家信息网最后更新 2025年01月19日如何用Python定义Schema并生成Parquet文件一、简单字段定义
本篇文章给大家分享的是有关如何用Python定义Schema并生成Parquet文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
一、简单字段定义
1、定义 Schema 并生成 Parquet 文件
import pandas as pdimport pyarrow as paimport pyarrow.parquet as pq# 定义 Schemaschema = pa.schema([ ('id', pa.int32()), ('email', pa.string())])# 准备数据ids = pa.array([1, 2], type = pa.int32())emails = pa.array(['first@example.com', 'second@example.com'], pa.string())# 生成 Parquet 数据batch = pa.RecordBatch.from_arrays( [ids, emails], schema = schema)table = pa.Table.from_batches([batch])# 写 Parquet 文件 plain.parquetpq.write_table(table, 'plain.parquet')import pandas as pdimport pyarrow as paimport pyarrow . parquet as pq# 定义 Schemaschema = pa . schema ( [ ( 'id' , pa . int32 ( ) ) , ( 'email' , pa . string ( ) )] )# 准备数据ids = pa . array ( [ 1 , 2 ] , type = pa . int32 ( ) )emails = pa . array ( [ 'first@example.com' , 'second@example.com' ] , pa . string ( ) )# 生成 Parquet 数据batch = pa . RecordBatch . from_arrays ( [ ids , emails ] , schema = schema)table = pa . Table . from_batches ( [ batch ] )# 写 Parquet 文件 plain.parquetpq . write_table ( table , 'plain.parquet' )
2、验证 Parquet 数据文件
我们可以用工具 parquet-tools
来查看 plain.parquet
文件的数据和 Schema
$ parquet-tools schema plain.parquet message schema { optional int32 id; optional binary email (STRING); } $ parquet-tools cat --json plain.parquet {"id":1,"email":"first@example.com"} {"id":2,"email":"second@example.com"}
没问题,与我们期望的一致。也可以用 pyarrow
代码来获取其中的 Schema
和数据
schema = pq.read_schema('plain.parquet')print(schema)df = pd.read_parquet('plain.parquet')print(df.to_json())schema = pq . read_schema ( 'plain.parquet' )print ( schema )df = pd . read_parquet ( 'plain.parquet' )print ( df . to_json ( ) )
输出为:
schema = pq.read_schema('plain.parquet')print(schema)df = pd.read_parquet('plain.parquet')print(df.to_json())schema = pq . read_schema ( 'plain.parquet' )print ( schema )df = pd . read_parquet ( 'plain.parquet' )print ( df . to_json ( ) )
二、含嵌套字段定义
下面的 Schema
定义加入一个嵌套对象,在 address
下分 email_address
和 post_address
,Schema
定义及生成 Parquet
文件的代码如下
import pandas as pdimport pyarrow as paimport pyarrow.parquet as pq# 内部字段address_fields = [ ('email_address', pa.string()), ('post_address', pa.string()),]# 定义 Parquet Schema,address 嵌套了 address_fieldsschema = pa.schema(j)# 准备数据ids = pa.array([1, 2], type = pa.int32())addresses = pa.array( [('first@example.com', 'city1'), ('second@example.com', 'city2')], pa.struct(address_fields))# 生成 Parquet 数据batch = pa.RecordBatch.from_arrays( [ids, addresses], schema = schema)table = pa.Table.from_batches([batch])# 写 Parquet 数据到文件pq.write_table(table, 'nested.parquet')import pandas as pdimport pyarrow as paimport pyarrow . parquet as pq# 内部字段address_fields = [ ( 'email_address' , pa . string ( ) ) , ( 'post_address' , pa . string ( ) ) ,]# 定义 Parquet Schema,address 嵌套了 address_fieldsschema = pa . schema ( j )# 准备数据ids = pa . array ( [ 1 , 2 ] , type = pa . int32 ( ) )addresses = pa . array ( [ ( 'first@example.com' , 'city1' ) , ( 'second@example.com' , 'city2' ) ] , pa . struct ( address_fields ))# 生成 Parquet 数据batch = pa . RecordBatch . from_arrays ( [ ids , addresses ] , schema = schema)table = pa . Table . from_batches ( [ batch ] )# 写 Parquet 数据到文件pq . write_table ( table , 'nested.parquet' )
1、验证 Parquet 数据文件
同样用 parquet-tools
来查看下 nested.parquet
文件
$ parquet-tools schema nested.parquet message schema { optional int32 id; optional group address { optional binary email_address (STRING); optional binary post_address (STRING); } } $ parquet-tools cat --json nested.parquet {"id":1,"address":{"email_address":"first@example.com","post_address":"city1"}} {"id":2,"address":{"email_address":"second@example.com","post_address":"city2"}}
用 parquet-tools
看到的 Schama
并没有 struct
的字样,但体现了它 address
与下级属性的嵌套关系。
用 pyarrow
代码来读取 nested.parquet
文件的 Schema
和数据是什么样子
schema = pq.read_schema("nested.parquet")print(schema)df = pd.read_parquet('nested.parquet')print(df.to_json())schema = pq . read_schema ( "nested.parquet" )print ( schema )df = pd . read_parquet ( 'nested.parquet' )print ( df . to_json ( ) )
输出:
id: int32 -- field metadata -- PARQUET:field_id: '1'address: struct<email_address: string, post_address: string> child 0, email_address: string -- field metadata -- PARQUET:field_id: '3' child 1, post_address: string -- field metadata -- PARQUET:field_id: '4' -- field metadata -- PARQUET:field_id: '2'{"id":{"0":1,"1":2},"address":{"0":{"email_address":"first@example.com","post_address":"city1"},"1":{"email_address":"second@example.com","post_address":"city2"}}}id : int32 -- field metadata -- PARQUET : field_id : '1'address : struct & lt ; email_address : string , post_address : string & gt ; child 0 , email_address : string -- field metadata -- PARQUET : field_id : '3' child 1 , post_address : string -- field metadata -- PARQUET : field_id : '4' -- field metadata -- PARQUET : field_id : '2'{ "id" : { "0" : 1 , "1" : 2 } , "address" : { "0" : { "email_address" : "first@example.com" , "post_address" : "city1" } , "1" : { "email_address" : "second@example.com" , "post_address" : "city2" } } }
数据当然是一样的,有略微不同的是显示的 Schema
中, address
标识为 struct
, 明确的表明它是一个 struct
类型,而不是只展示嵌套层次。
以上就是如何用Python定义Schema并生成Parquet文件,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
数据
文件
生成
字段
准备
代码
更多
知识
篇文章
输出
验证
不同
实用
一致
下级
字样
对象
就是
层次
属性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
排序规则数据库默认排序
暗黑破坏神二天梯受服务器影响么
软件开发费用有哪些
软件开发能找什么工作
bms软件开发工程师济南
数据库授权角色
杭州游卡网络技术 校招
快法务服务器
江苏计算机软件开发
济南微信公众号软件开发解决方案
去马来西亚做软件开发怎么样
公路管理中心计算机与网络技术
数据库一般在哪里设计最好
浙江电子网络技术怎么样
顺义区网络营销软件开发概况
安徽质量软件开发价格服务标准
数据库一个字
彩票系统软件开发 福州
软件开发怎么说英语
软件开发需求澄清谁做
哪里负责协调网络安全工作
网络安全设计画图片
英雄联盟用心做皮肤用脚做服务器
嵌入式软件开发票
华为网络技术排名
信息网络安全责任分解
2015网络安全中国论坛
人性化的软件开发 pdf
税务网络安全 专家谈
山东c语言软件开发报价