Arrow 是一套技术,可使大数据系统快速处理和传输数据。
apache-arrow
npm install apache-arrow
或 yarn add apache-arrow
(阅读下方关于我们如何打包 apache-arrow 的说明)
Apache Arrow 是一种列式内存布局规范,用于编码向量和类似表格的平面和嵌套数据容器。Arrow 规范在内存中对齐列式数据,以最大程度地减少缓存未命中,并利用现代处理器上最新的 SIMD(单输入多数据)和 GPU 操作。
Apache Arrow 是大型内存列式数据的新兴标准(Spark、Pandas、Drill、Graphistry 等)。通过标准化通用的二进制交换格式,大数据系统可以降低跨系统通信相关的成本和摩擦。
查看我们的 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]);
fetch
加载数据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 issues。在 issue 上发表评论和/或联系 [email protected] 提出您的问题和想法。
如果您想报告错误但没有时间修复它,您仍然可以将其发布在 GitHub issues 上,或通过电子邮件发送到邮件列表 [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 社区是一个多元化的群体,拥有各种各样的目标环境和工具链。发布多个包可以适应各种类型的项目。
如果您认为我们错过了某个编译目标,并且它阻碍了采用,请提交 issue。
我们编译的捆绑包支持过去 5 年发布的现代浏览器。这包括受支持的 Firefox、Chrome、Edge 和 Safari 版本。我们不积极支持 Internet Explorer。Apache Arrow 也适用于维护版本的 Node。
更广泛的 Apache Arrow 提交者的完整列表。
更广泛的 Apache Arrow 项目和组织的完整列表。