Parquet 入门详解:深入浅出全解析

Parquet 入门详解:深入浅出全解析

在大数据领域,数据量巨大、分析需求复杂,如果还用传统的 CSV 或 JSON 文件存储,数据分析效率会极低、成本很高。Parquet,就是为了解决这些痛点而生的。下面我们用“故事 + 图例 + 类比”的方式,从头到尾讲透 Parquet。


一、为什么要用 Parquet?

假设你在做一个分析:“全国千万用户的订单数据”,每天都要统计用户消费总额、各地区热卖商品。传统 CSV 文件,每次统计都要把每条记录的所有字段都读出来——明明你只想要“金额”和“地区”这两列,其他字段却不得不也跟着读,白白浪费资源。

痛点总结:

  1. 数据太大,读入慢
  2. 查询只要部分字段却得全量读取
  3. 存储空间浪费

二、Parquet 如何解决这些问题?

Parquet 的核心思想就是“列式存储”。

类比:超市仓库管理

  • 行式存储(CSV):所有货物按订单堆在一起,要查某种商品得把所有箱子打开找。
  • 列式存储(Parquet):同种商品集中放一起,要查某种商品直接去那一排拿即可。

具体存储方式对比

假设有如下订单数据:

订单ID用户ID商品金额城市
11001可乐12北京
21002面包8上海
31003牛奶15广州
  • 行式存储(CSV):1,1001,可乐,12,北京 | 2,1002,面包,8,上海 | 3,1003,牛奶,15,广州

  • 列式存储(Parquet)

    • 订单ID:1,2,3
    • 用户ID:1001,1002,1003
    • 商品:可乐,面包,牛奶
    • 金额:12,8,15
    • 城市:北京,上海,广州

三、Parquet 的核心优点详解

1. 只读需要的列,查询速度飞起

如果你只需要统计每个城市的订单总金额,Parquet 可以只读“城市”和“金额”这两列。

  • CSV:5 列*3 条=15 格数据都要读
  • Parquet:只读 2 列*3 条=6 格数据

2. 压缩率高,省存储

  • 同一列往往数据类型和范围相近,比如“城市”全是字符串,压缩算法能极大压缩重复内容。
  • 举例:“北京,上海,北京,北京,广州,广州”,用字典压缩:0=北京,1=上海,2=广州,只存 0,1,0,0,2,2。

3. 支持复杂结构(嵌套字段、数组等)

  • 比如一条订单里有多个商品,或包含一个嵌套的收货人地址,Parquet 都能高效存储。

4. 兼容主流大数据工具

  • Spark、Hive、Trino、Pandas、PyArrow 等均完美支持。

四、实际应用场景举例

  1. 大数据报表分析:每天处理上亿条数据,快速聚合统计。
  2. 云端数据湖存储:云服务(如阿里云 OSS、AWS S3)常用存储格式。
  3. 机器学习特征库:批量读写部分特征字段,效率极高。

五、Parquet 文件长什么样?

Parquet 文件本质上是二进制格式,肉眼看不懂。但可以用 Pandas/PyArrow 轻松读写。

代码实操:

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

# 假设有如下表格
orders = pd.DataFrame({
    'order_id': [1, 2, 3],
    'user_id': [1001, 1002, 1003],
    'item': ['可乐', '面包', '牛奶'],
    'amount': [12, 8, 15],
    'city': ['北京', '上海', '广州']
})

# 写成 Parquet 文件
pq.write_table(pa.Table.from_pandas(orders), 'orders.parquet')

# 只读取“金额”和“城市”两列
df = pq.read_table('orders.parquet', columns=['amount', 'city']).to_pandas()
print(df)

六、和其他格式详细对比

格式行/列式优势劣势典型场景
CSV行式通用、易用慢、浪费空间导入导出、小数据
JSON行式结构灵活体积大、慢传递配置、API
Parquet列式快、省空间、兼容好不易直接读写大数据分析、存储
ORC列式性能高、压缩优支持稍少数据仓库

七、常见疑问答疑

  1. Parquet 文件可以直接用 Excel 打开吗?

    • 不行。要用数据分析工具(Pandas、Spark 等)读写。
  2. 支持中文和特殊字符吗?

    • 完全支持。
  3. 能否增量写入?

    • 通常每次写入生成一个新文件,批量追加需用大数据平台支持。
  4. 数据太大,一台电脑读不动怎么办?

    • Parquet 可拆分,分布式平台可并行处理。

八、学习与入门建议

  1. 小数据量可用 Pandas + PyArrow 实践
  2. 大数据量建议用 Spark SQL 操作 Parquet
  3. 理解列式存储思想,体验 I/O 提升
  4. 学会看 Parquet 结构,可用 parquet-tools 查看结构

九、总结

Parquet 是当下主流大数据分析、数据湖的必备利器,掌握 Parquet 就是掌握高效数据分析的“钥匙”。不管你是数据工程师、分析师、还是开发者,只要数据量大,强烈推荐优先选择 Parquet!

希望这篇文章能帮你全面理解 Parquet。还有什么不明白的,欢迎随时提问!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值