Parquet 入门详解:深入浅出全解析
在大数据领域,数据量巨大、分析需求复杂,如果还用传统的 CSV 或 JSON 文件存储,数据分析效率会极低、成本很高。Parquet,就是为了解决这些痛点而生的。下面我们用“故事 + 图例 + 类比”的方式,从头到尾讲透 Parquet。
一、为什么要用 Parquet?
假设你在做一个分析:“全国千万用户的订单数据”,每天都要统计用户消费总额、各地区热卖商品。传统 CSV 文件,每次统计都要把每条记录的所有字段都读出来——明明你只想要“金额”和“地区”这两列,其他字段却不得不也跟着读,白白浪费资源。
痛点总结:
- 数据太大,读入慢
- 查询只要部分字段却得全量读取
- 存储空间浪费
二、Parquet 如何解决这些问题?
Parquet 的核心思想就是“列式存储”。
类比:超市仓库管理
- 行式存储(CSV):所有货物按订单堆在一起,要查某种商品得把所有箱子打开找。
- 列式存储(Parquet):同种商品集中放一起,要查某种商品直接去那一排拿即可。
具体存储方式对比
假设有如下订单数据:
| 订单ID | 用户ID | 商品 | 金额 | 城市 |
|---|---|---|---|---|
| 1 | 1001 | 可乐 | 12 | 北京 |
| 2 | 1002 | 面包 | 8 | 上海 |
| 3 | 1003 | 牛奶 | 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 等均完美支持。
四、实际应用场景举例
- 大数据报表分析:每天处理上亿条数据,快速聚合统计。
- 云端数据湖存储:云服务(如阿里云 OSS、AWS S3)常用存储格式。
- 机器学习特征库:批量读写部分特征字段,效率极高。
五、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 | 列式 | 性能高、压缩优 | 支持稍少 | 数据仓库 |
七、常见疑问答疑
-
Parquet 文件可以直接用 Excel 打开吗?
- 不行。要用数据分析工具(Pandas、Spark 等)读写。
-
支持中文和特殊字符吗?
- 完全支持。
-
能否增量写入?
- 通常每次写入生成一个新文件,批量追加需用大数据平台支持。
-
数据太大,一台电脑读不动怎么办?
- Parquet 可拆分,分布式平台可并行处理。
八、学习与入门建议
- 小数据量可用 Pandas + PyArrow 实践
- 大数据量建议用 Spark SQL 操作 Parquet
- 理解列式存储思想,体验 I/O 提升
- 学会看 Parquet 结构,可用 parquet-tools 查看结构
九、总结
Parquet 是当下主流大数据分析、数据湖的必备利器,掌握 Parquet 就是掌握高效数据分析的“钥匙”。不管你是数据工程师、分析师、还是开发者,只要数据量大,强烈推荐优先选择 Parquet!
希望这篇文章能帮你全面理解 Parquet。还有什么不明白的,欢迎随时提问!
1万+

被折叠的 条评论
为什么被折叠?



