# @dobesv/parquets 中文文档

规范地址：https://npmcn.com/package/%40dobesv/parquets/

版本：0\.13\.0
npm 元数据更新时间：2026-05-27T16:56:19.633Z
中文译文更新时间：2026-11-12T13:38:42.530Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40dobesv/parquets
原文对照：https://npmcn.com/package/%40dobesv/parquets/?lang=original
项目主页：https://github.com/dobesv/parquets
源码仓库：https://github.com/dobesv/parquets

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：871 kB，257 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=20
- 运行依赖：6 个
- peer 依赖：@types/node \*，@types/node-int64 \*，@types/thrift \*，@types/varint \*
- 首次发布：2021-10-20T19:23:41.457Z
- 最新版本发布：2026-05-27T16:56:19.337Z
- 近 30 天下载量：18509（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：10（近 12 个月 2 个）

## 中文简介

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

## 安装

```sh
npm install @dobesv/parquets
```

也可以使用：`pnpm add @dobesv/parquets`、`yarn add @dobesv/parquets`、`bun add @dobesv/parquets`

## README

# 木马

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

[![Build Status](https://travis-ci.org/kbajalc/parquets.svg?branch=master)](https://travis-ci.org/kbajalc/parquets) [![npm version](https://badge.fury.io/js/parquets.svg)](https://badge.fury.io/js/parquets) [![npm dependency status](https://david-dm.org/kbajalc/parquets.svg)](https://david-dm.org/kbajalc/parquets.svg) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)

此软件包来源于 [帕尔克特.js](https://github.com/ironSource/parquetjs),包含一个完全同步的 脚本类型执行 [公园](https://parquet.apache.org/) 文件格式。 执行情况符合 与 [Parquet 规格](https://github.com/apache/parquet-format) 正在测试中 与 Apache 兼容 [参考执行](https://github.com/apache/parquet-mr)。 。 。 .

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

-   只有GZIP和SNAPPY压缩兼容
-   [平板工具](https://github.com/apache/parquet-mr/tree/master/parquet-tools) 是帮助检查 Parquet 文件的命令行工具.
-   总是验证您装有现实数据样本的表格结构可以被Parquet Tools读取!

**帕尔克是什么?**: Parquet 是一个面向列的文件格式; 它允许您使用 将大量结构化数据写入文件, 压缩后读取部分 高效地退后. Parquet 格式基于 [谷歌的德雷梅尔纸](http://www.vldb.org/pvldb/vldb2010/papers/R29.pdf)。 。 。 .

## 安装

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

```
  $ npm install parquets
```

_parquets 需要节点.js\\ 7.6.0_

## 用法: 写入文件

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

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

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

```ts
// 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 格式并存储 它们在磁盘上.

```ts
// 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文件中取回行. 基本用途是创建读取器,然后取回光标/绘图器 它允许您逐行消费,直到所有行被读取.

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

```ts
// 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);
}
```

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

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

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

```ts
await reader.close();
```

## 编码

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

#### 普通编码( PLAIN)

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

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

#### 运行长度编码( RLE)

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

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

## 可选字段

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

```ts
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` 列表改为:

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

```ts
// 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 (英语) | 倒车,倒车 |
| 无效 8 | INT32号 | 倒车,倒车 |
| UINT 16 请检查URL=值 (帮助) | INT32号 | 倒车,倒车 |
| UINT 32 请检查DATE=中的日期值 (帮助) | INT32号 | 倒车,倒车 |
| UINT 64 (中文(简体) ) | INT64 (英语) | 倒车,倒车 |

## 缓冲行组大小( R)

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

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

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

## 依赖关系

平板用途 [节俭](https://thrift.apache.org/) 以编码图案和其他 元数据,但实际数据不使用节俭.

## 捐款

请确保你签署 [缴款许可证协议](https://github.com/ironSource/cla) 为了我们能接受你的贡献 我们非常感谢你!

## 许可证

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

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

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

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

## 常见问题

### @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 和提交记录判断。

