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 项目和组织 的完整列表。