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 问题。在问题上发表评论和/或联系 [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 提交者 的完整列表。
更广泛的 Apache Arrow 项目和组织 的完整列表。