Apache Arrow - v18.0.0-SNAPSHOT

Apache Arrow 在 JS 中

npm version

Arrow 是一套技术,使大数据系统能够快速处理和传输数据。

npm install apache-arrowyarn add apache-arrow

(阅读我们如何打包 apache-arrow 的信息)

为列式内存内分析提供动力

Apache Arrow 是一种用于编码平面和嵌套数据的向量和表格容器的列式内存布局规范。Arrow 规范将内存中的列数据对齐,以最大程度地减少缓存未命中,并利用现代处理器上的最新 SIMD(单指令多数据)和 GPU 操作。

Apache Arrow 正在成为大型内存内列式数据的新兴标准(SparkPandasDrillGraphistry 等)。通过标准化通用二进制交换格式,大数据系统可以降低跨系统通信相关的成本和摩擦。

开始使用

查看我们的API 文档,了解有关如何使用 Apache Arrow 的 JS 实现的更多信息。您还可以通过查看以下一些资源来学习示例

import { readFileSync } from 'fs';
import { tableFromIPC } from 'apache-arrow';

const arrow = readFileSync('simple.arrow');
const table = tableFromIPC(arrow);

console.table(table.toArray());

/*
foo, bar, baz
1, 1, aa
null, null, null
3, null, null
4, 4, bbb
5, 5, cccc
*/
import { readFileSync } from 'fs';
import { tableFromIPC } from 'apache-arrow';

const table = tableFromIPC([
'latlong/schema.arrow',
'latlong/records.arrow'
].map((file) => readFileSync(file)));

console.table([...table]);

/*
origin_lat, origin_lon
35.393089294433594, -97.6007308959961
35.393089294433594, -97.6007308959961
35.393089294433594, -97.6007308959961
29.533695220947266, -98.46977996826172
29.533695220947266, -98.46977996826172
*/
import { tableFromArrays } from 'apache-arrow';

const LENGTH = 2000;

const rainAmounts = Float32Array.from(
{ length: LENGTH },
() => Number((Math.random() * 20).toFixed(1)));

const rainDates = Array.from(
{ length: LENGTH },
(_, i) => new Date(Date.now() - 1000 * 60 * 60 * 24 * i));

const rainfall = tableFromArrays({
precipitation: rainAmounts,
date: rainDates
});

console.table([...rainfall]);
import { tableFromIPC } from "apache-arrow";

const table = await tableFromIPC(fetch("/simple.arrow"));

console.table([...table]);

您可以使用 makeVector 从 JavaScript 类型化数组创建向量,并使用 vectorFromArray 从 JavaScript 数组创建向量。makeVector 速度快得多,并且不需要复制。

import { makeVector } from "apache-arrow";

const LENGTH = 2000;

const rainAmounts = Float32Array.from(
{ length: LENGTH },
() => Number((Math.random() * 20).toFixed(1)));

const vector = makeVector(rainAmounts);

const typed = vector.toArray()

assert(typed instanceof Float32Array);

for (let i = -1, n = vector.length; ++i < n;) {
assert(vector.get(i) === typed[i]);
}

字符串可以编码为 UTF-8 或字典编码的 UTF-8。字典编码更有效地编码重复值。您可以使用 vectorFromArray 方便地创建一个字典编码的字符串,或者使用 makeVector 高效地创建一个字典编码的字符串。

import { makeVector, vectorFromArray, Dictionary, Uint8, Utf8 } from "apache-arrow";

const utf8Vector = vectorFromArray(['foo', 'bar', 'baz'], new Utf8);

const dictionaryVector1 = vectorFromArray(
['foo', 'bar', 'baz', 'foo', 'bar']
);

const dictionaryVector2 = makeVector({
data: [0, 1, 2, 0, 1], // indexes into the dictionary
dictionary: utf8Vector,
type: new Dictionary(new Utf8, new Uint8)
});

参与进来

参见 DEVELOP.md

即使您不打算为 Apache Arrow 本身或其他项目中的 Arrow 集成做出贡献,我们也乐于让您参与进来

我们更喜欢以 GitHub 拉取请求的形式接收贡献。请向 github.com/apache/arrow 存储库发送拉取请求。

如果您正在寻找一些关于贡献什么的创意,请查看 Apache Arrow 项目的 GitHub 问题。在问题上发表评论和/或联系 [email protected],提出您的问题和创意。

如果您想报告错误但没有时间修复它,您仍然可以在 GitHub 问题上发布它,或发送邮件至邮件列表 [email protected]

apache-arrow 使用 TypeScript 编写,但该项目已编译为多个 JS 版本和常见模块格式。

基本 apache-arrow 包出于方便起见包含所有编译目标,但如果您关心 node_modules 的占用空间,我们为您准备了方案。

这些目标也在 @apache-arrow 命名空间下发布

npm install apache-arrow # <-- combined es2015/CommonJS/ESModules/UMD + esnext/UMD
npm install @apache-arrow/ts # standalone TypeScript package
npm install @apache-arrow/es5-cjs # standalone es5/CommonJS package
npm install @apache-arrow/es5-esm # standalone es5/ESModules package
npm install @apache-arrow/es5-umd # standalone es5/UMD package
npm install @apache-arrow/es2015-cjs # standalone es2015/CommonJS package
npm install @apache-arrow/es2015-esm # standalone es2015/ESModules package
npm install @apache-arrow/es2015-umd # standalone es2015/UMD package
npm install @apache-arrow/esnext-cjs # standalone esNext/CommonJS package
npm install @apache-arrow/esnext-esm # standalone esNext/ESModules package
npm install @apache-arrow/esnext-umd # standalone esNext/UMD package

JS 社区是一个多元化的群体,目标环境和工具链也各不相同。发布多个包可以适应各种类型的项目。

如果您认为我们遗漏了一个编译目标,并且它是采用该项目的障碍,请提交问题。

我们编译的捆绑包支持过去 5 年发布的现代浏览器。这包括 Firefox、Chrome、Edge 和 Safari 的支持版本。我们不积极支持 Internet Explorer。Apache Arrow 也适用于 维护的 Node 版本

人员

更广泛的 Apache Arrow 提交者 的完整列表。

  • Brian Hulette,提交者
  • Paul Taylor,提交者
  • Dominik Moritz,提交者

由 Apache Arrow 在 JS 中提供支持

更广泛的 Apache Arrow 项目和组织 的完整列表。

  • Apache Arrow -- 为列式内存内分析提供动力的父项目,包括附属的开源项目
  • Perspective -- Perspective 是一款交互式分析和数据可视化组件,非常适合大型和/或流式数据集。Perspective 利用编译为 WebAssembly 的 Arrow C++。
  • Falcon 是一款用于在数百万或数十亿条记录的多个聚合可视化之间进行链接交互的可视化工具。
  • Vega 是一个用于 Web 上交互式可视化的工具生态系统。Vega 团队实现了一个 Arrow 加载器
  • Arquero 是一个用于查询处理和转换基于数组的数据表的库。
  • OmniSci 是一个 GPU 数据库。其 JavaScript 连接器返回 Arrow 数据帧。

许可证

Apache 2.0