Format Atlas

对比

JSON Lines 与 Avro:逐行记录还是模式

JSON Lines 在每个 UTF-8 行中保存一个 JSON 值,便于逐条处理。Avro 根据写入方模式编码带类型的记录,并可在数据块中保存模式元数据。

应该选择哪种格式?

需要可读事件、文本工具和逐行流处理时可选 JSON Lines;需要类型化记录和受管理的模式解析时可考虑 Avro。

适用于 JSON Lines

逐行处理的日志和记录 · JSON 记录的流式交换

  • 逐条读取和写入记录
  • 用常见文本工具追加或合并数据

适用于 Avro

按照定义好的模式交换记录

  • 跟踪模式版本的事件和数据管道

基本信息

项目JSON LinesAvro
扩展名.jsonl, .ndjson.avro
MIME 类型application/jsonlapplication/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 模式和联合类型规则。

了解详情

参考资料与规范