对比
JSON Lines 与 Avro:逐行记录还是模式
JSON Lines 在每个 UTF-8 行中保存一个 JSON 值,便于逐条处理。Avro 根据写入方模式编码带类型的记录,并可在数据块中保存模式元数据。
应该选择哪种格式?
需要可读事件、文本工具和逐行流处理时可选 JSON Lines;需要类型化记录和受管理的模式解析时可考虑 Avro。
适用于 JSON Lines
逐行处理的日志和记录 · JSON 记录的流式交换
- 逐条读取和写入记录
- 用常见文本工具追加或合并数据
适用于 Avro
按照定义好的模式交换记录
- 跟踪模式版本的事件和数据管道
基本信息
| 项目 | JSON Lines | Avro |
|---|---|---|
| 扩展名 | .jsonl, .ndjson | .avro |
| MIME 类型 | application/jsonl | application/avro |
| 常见用途 | 逐行处理的日志和记录 · JSON 记录的流式交换 | 按照定义好的模式交换记录 |
| 打开方式 | 用文本编辑器或支持 JSON Lines 的工具打开。逐行验证 JSON,有助于定位语法错误所在的记录。 | 使用支持 Avro 的工具检查模式、字段、类型和记录。 |
| 导出或转换 | 转换为 JSON 数组时,把各行汇集为数组元素;转换回 JSON Lines 时,每个值单独写一行。处理大文件时要留意内存占用。 | 转换为 JSON 或 Parquet 时,检查字段名、类型、空值、逻辑类型、记录数和模式兼容性。 |
按用途选择
逐条读取和写入记录
逐行处理的日志和记录 · JSON 记录的流式交换
JSON Lines用常见文本工具追加或合并数据
逐行处理的日志和记录 · JSON 记录的流式交换
JSON Lines跟踪模式版本的事件和数据管道
按照定义好的模式交换记录
Avro关键点 1
JSON Lines 读取器无需单独模式即可解析每个 JSON 值;Avro 二进制读取器需要写入方模式。
进一步了解差异关键点 2
追加完整 JSON Lines 是文本操作;Avro 容器写入器必须正确维护数据块和同步标记。
进一步了解差异进一步了解差异
请用实际数据和读取端测试;两种格式都不保证始终更小或更快。
- JSON Lines 每行是独立 JSON 值;Avro 记录遵循声明的模式。
- Avro 容器文件把写入方模式元数据与数据块一起保存;JSON Lines 是 UTF-8 文本。
- 读取端可解析兼容的 Avro 写入与读取模式变化;JSON Lines 的字段和类型约定由应用定义。
常见问题
JSON Lines 与 Avro 的 JSON 编码相同吗?
不同。JSON Lines 按行分隔普通 JSON 值;Avro 的 JSON 编码仍遵循 Avro 模式和联合类型规则。