0%

数据格式对比:JSONL / Parquet / Arrow / ORC

数据格式对比:JSONL / Parquet / Arrow / ORC

一句话定位:选数据格式本质是在”解析成本 / 存储扫描 / 跨语言传输”之间取舍。面试常考”为什么把 JSONL 换成 Parquet/Arrow 吞吐能翻倍”。

1. 四种格式速览

格式 形态 解析成本 存储/扫描 跨语言 生态
JSONL 文本,每行一对象 高(逐行 JSON decode,CPU 瓶颈) 无压缩/列裁剪 通用 日志、交换
Parquet 列式 + 压缩 低(二进制列读) 友好(列裁剪+谓词下推+高压缩) Hadoop 事实标准
Arrow 内存列式 极低(零拷贝) 内存计算友好 极佳(C++/Python/Java 共享) 内存计算/传输
ORC 列式 + 压缩 友好 Hive 生态强绑定
  • JSONL:可读但需逐行解析,无 schema/压缩弱,适合采集交换,查询慢。
  • Parquet:列式 + 嵌套支持 + 高压缩,分析型存储首选。
  • Arrow:内存中的列式格式,跨语言零拷贝共享(Spark↔Pandas、Ray Plasma),避免序列化。
  • ORC:与 Parquet 类似,但和 Hive/Impala 集成更深。

2. 面试话术:JSONL → Parquet/Arrow 吞吐提升的三点

  1. 消除文本解析:免去逐行 JSON decode(最贵的 CPU 环节);
  2. 只读需要的列(列裁剪):不必把整行反序列化;
  3. 零拷贝 / 二进制列式:Arrow 在内存层免序列化,Parquet 在存储层免文本解析。

参考:Apache Parquet / Arrow / ORC 官方文档;Google Dremel 论文(Parquet 思想来源)