@dobesv/parquets

中文文档
0.13.0发布于 2026/05/28MITTypeScriptCommonJS构建来源已验证近 30 天下载 1.9万

基于parquet.js 的 Parquet 文件格式的 TypeScript 执行

中文使用文档
文档目录11 节
  1. 安装
  2. 用法: 写入文件
  3. 用法: 读取文件
  4. 编码
  5. 可选字段
  6. 嵌入式行和矩阵
  7. 支持类型和编码列表
  8. 缓冲行组大小( R)
  9. 依赖关系
  10. 捐款
  11. 许可证

木马

完全同步 TypeScript 执行 Parquet 文件格式

Build Status npm version npm dependency status License: MIT

此软件包来源于 帕尔克特.js,包含一个完全同步的 脚本类型执行 公园 文件格式。 执行情况符合 与 Parquet 规格 正在测试中 与 Apache 兼容 参考执行。 。 。 .

警告数字 : 与参考执行存在兼容性问题数字 :

  • 只有GZIP和SNAPPY压缩兼容
  • 平板工具 是帮助检查 Parquet 文件的命令行工具.
  • 总是验证您装有现实数据样本的表格结构可以被Parquet Tools读取!

帕尔克是什么?: Parquet 是一个面向列的文件格式; 它允许您使用 将大量结构化数据写入文件, 压缩后读取部分 高效地退后. Parquet 格式基于 谷歌的德雷梅尔纸。 。 。 .

安装

要使用带节点的parquet.js,请使用npm安装:

  $ npm install parquets

parquets 需要节点.js\ 7.6.0

用法: 写入文件

一旦您安装了 parquets 库, 您可以将它作为单个导入 模块 :

import { ParquetSchema, ParquetWriter, ParquetReader } from 'parquets';

Parquet文件有严格的计划,类似于SQL数据库中的表格. 这么说吧, 为了制作Parquet文件 我们首先需要宣布一个新的计划 给 是一个简单的例子,可以显示如何将 ParquetSchema 对象 :

// declare a schema for the `fruits` table
let schema = new ParquetSchema({
  name: { type: 'UTF8' },
  quantity: { type: 'INT64' },
  price: { type: 'DOUBLE' },
  date: { type: 'TIMESTAMP_MILLIS' },
  in_stock: { type: 'BOOLEAN' }
});

请注意, Parquet 计划支持筑巢, 所以你可以储存复杂,任意 将记录嵌入一行(较后),同时保持良好 压缩.

一旦我们有一个计划, 我们可以创建一个 ParquetWriter 对象。 作家会的 将输入行作为 JSON 对象,将其转换为 Parquet 格式并存储 它们在磁盘上.

// create new ParquetWriter that writes to 'fruits.parquet`
let writer = await ParquetWriter.openFile(schema, 'fruits.parquet');

// append a few rows to the file
await writer.appendRow({name: 'apples', quantity: 10, price: 2.5, date: new Date(), in_stock: true});
await writer.appendRow({name: 'oranges', quantity: 10, price: 2.5, date: new Date(), in_stock: true});

完成文件添加行后,必须告诉撰写对象 通过调用 close() 方法 :

用法: 读取文件

一个parquet读取器可以按顺序从parquet文件中取回行. 基本用途是创建读取器,然后取回光标/绘图器 它允许您逐行消费,直到所有行被读取.

您可打开多个光标并同时使用 。 所有光标变为 关闭时无效 () 调用 读者反对.

// create new ParquetReader that reads from 'fruits.parquet`
let reader = await ParquetReader.openFile('fruits.parquet');

// create a new cursor
let cursor = reader.getCursor();

// read all records from the file and print them
let record = null;
while (record = await cursor.next()) {
  console.log(record);
}

创建光标时,您可以选择只请求一个子集 栏应从磁盘中读取。 例如:

// create a new cursor that will only return the `name` and `price` columns
let cursor = reader.getCursor(['name', 'price']);

在读完文件后, 您必须关闭此文件 避免泄露文件描述符.

await reader.close();

编码

内部, Parquet 格式将连续存储每个字段的值 可用若干方案压缩/编码的数组.

普通编码( PLAIN)

最简单的编码方案是PLAIN编码. 它只是储存 值是没有压缩的。 PLAIN 编码目前 所有类型的默认值除外 BOOLEAN数字 :

let schema = new ParquetSchema({
  name: { type: 'UTF8', encoding: 'PLAIN' },
});

运行长度编码( RLE)

Parquet 混合运行长度和位包编码允许压缩运行 数字非常高效。 注意 RLE 编码只能用于 结合 BOOLEAN, (中文(简体) ), INT32 财务报告和审定财务报表 INT64 类型。 RLE 编码 需要额外 bitWidth 包含最大数量 存储字段最大值所需的比特.

let schema = new ParquetSchema({
  age: { type: 'UINT_32', encoding: 'RLE', bitWidth: 7 },
});

可选字段

默认情况下,所有字段都需要出现在每行中. 也可以标注 一个字段作为“ 可选的” 字段, 允许您存储缺少该字段的行 :

let schema = new ParquetSchema({
  name: { type: 'UTF8' },
  quantity: { type: 'INT64', optional: true },
});

let writer = await ParquetWriter.openFile(schema, 'fruits.parquet');
await writer.appendRow({name: 'apples', quantity: 10 });
await writer.appendRow({name: 'banana' }); // not in stock

嵌入式行和矩阵

Parquet 支持嵌入式计划,允许您存储更多行 复杂结构,而不是简单的平分值。 宣布一个计划 以嵌入地取出 type 在栏定义中添加 fields 列表改为:

举个例子,让我们可以储存一个更先进的"水果"表 其中每行包含名称、颜色列表和“库存”对象列表.

// advanced fruits table
let schema = new ParquetSchema({
  name: { type: 'UTF8' },
  colours: { type: 'UTF8', repeated: true },
  stock: {
    repeated: true,
    fields: {
      price: { type: 'DOUBLE' },
      quantity: { type: 'INT64' },
    }
  }
});

// the above schema allows us to store the following rows:
let writer = await ParquetWriter.openFile(schema, 'fruits.parquet');

await writer.appendRow({
  name: 'banana',
  colours: ['yellow'],
  stock: [
    { price: 2.45, quantity: 16 },
    { price: 2.60, quantity: 420 }
  ]
});

await writer.appendRow({
  name: 'apple',
  colours: ['red', 'green'],
  stock: [
    { price: 1.20, quantity: 42 },
    { price: 1.30, quantity: 230 }
  ]
});

await writer.close();

// reading nested rows with a list of explicit columns
let reader = await ParquetReader.openFile('fruits.parquet');

let cursor = reader.getCursor([['name'], ['stock', 'price']]);
let record = null;
while (record = await cursor.next()) {
  console.log(record);
}

await reader.close();

可能并不明显,为什么人们想要实施或使用这种特征,如果 原则上也可以通过使用JSON对记录进行序列化来实现 (或类似方案)然后存储到UTF8字段:

把关于严格打字的优点的哲学讨论放在一边, 了解所有记录的结构和子类型(全球)意味着我们不 每个记录都必须复制此元数据(即字段名称)。 在顶上 其中,知道一个字段的类型 使我们能够压缩剩下的 数据效率更高.

支持类型和编码列表

我们的目标是完成特色并增加新的功能,因为这些功能被添加到 Parquet 规格; 这是当前已执行的数据类型列表 编码 :

逻辑类型初级类型编码
UTF8 主题BYTE 阿雷诗
贾森BYTE 阿雷诗
贝森BYTE 阿雷诗
BYTE 阿雷BYTE 阿雷诗
时间( M)INT32号倒车,倒车
时间( M)INT64 (英语)倒车,倒车
时光倒流INT64 (英语)倒车,倒车
时号( M)INT64 (英语)倒车,倒车
玻利维亚玻利维亚倒车,倒车
浮图浮图诗
丢弃丢弃诗
INT32号INT32号倒车,倒车
INT64 (英语)INT64 (英语)倒车,倒车
INT96号楼INT96号楼诗
INT 8 (中文(简体) )INT32号倒车,倒车
INT 16 请检查URL=值 (帮助)INT32号倒车,倒车
INT 32 (英语)INT32号倒车,倒车
64国道INT64 (英语)倒车,倒车
无效 8INT32号倒车,倒车
UINT 16 请检查URL=值 (帮助)INT32号倒车,倒车
UINT 32 请检查DATE=中的日期值 (帮助)INT32号倒车,倒车
UINT 64 (中文(简体) )INT64 (英语)倒车,倒车

缓冲行组大小( R)

当写入 Parquet 文件时 ParquetWriter 将在内存中缓冲行 直到一行组完成(或 close() 然后写出行 组合到磁盘.

用户可配置行组的大小并控制最大值 任何特定时间在内存中缓冲的行数以及行数 磁盘上同一位置的行:

let writer = await ParquetWriter.openFile(schema, 'fruits.parquet');
writer.setRowGroupSize(8192);

依赖关系

平板用途 节俭 以编码图案和其他 元数据,但实际数据不使用节俭.

捐款

请确保你签署 缴款许可证协议 为了我们能接受你的贡献 我们非常感谢你!

许可证

parquet.js 版权 (c) 2017铁源有限公司.

特此免费准许任何人获得《公约》副本 此软件和相关文档文件( “软件” ), 可在 软件不受限制,包括不受限制的使用权, 复制、修改、合并、出版、分发、分许可和/或出售 软件,并允许获得软件的人这样做, 符合下列条件:

上述版权通知和这项许可通知应载入所有 软件的复制件或大部分.

软件是提供的"AS IS", 没有任何种类的恐惧, 释放或渗透, 包括但不限制于雇佣军的保障 特别是目的和非目的。 绝对不能让警察或警察 对于任何索赔、索赔或其他索赔 转让、转让或其他合同的产生、产生或涉及 软件或软件的使用或其他交易.

版本与发布记录

@dobesv/parquets 共发布 10 个版本,首次发布于 2021/10/21;过去 12 个月发布了 2 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.13.0latest2026/05/285 个月前
0.12.02026/05/275 个月前
0.11.92024/11/132 年前
0.11.82023/03/013 年前
0.11.72023/02/013 年前
0.11.62023/02/013 年前

关于 @dobesv/parquets 的常见问题

@dobesv/parquets 是什么?

基于parquet.js 的 Parquet 文件格式的 TypeScript 执行

如何安装 @dobesv/parquets?

在项目目录运行 npm install @dobesv/parquets,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@types/node(*)、@types/node-int64(*)、@types/thrift(*)、@types/varint(*)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@dobesv/parquets 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@dobesv/parquets 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@dobesv/parquets 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@dobesv/parquets 可以商用吗?

@dobesv/parquets 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dobesv/parquets 的下载量有多少?

根据 npm 官方下载统计,@dobesv/parquets 在 2026/10/13 – 2026/11/11 这 30 天内被下载 18,509 次,日均约 617 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dobesv/parquets 还在维护吗?

最新版本 0.13.0 发布于 2026/05/28(5 个月前);至今共发布 10 个版本,其中过去 12 个月发布了 2 个;首次发布于 2021/10/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。