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 pull request 的形式接收貢獻。請將 pull request 發送到 github.com/apache/arrow 儲存庫。
如果您正在尋找一些關於貢獻的想法,請查看 Apache Arrow 專案的 GitHub issues。在 issue 上評論和/或透過 dev@arrow.apache.org 聯絡我們,提出您的問題和想法。
如果您想回報錯誤但沒有時間修復它,您仍然可以在 GitHub issues 上發布,或發送電子郵件至郵件列表 dev@arrow.apache.org
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。
我們編譯的 bundles 支援近 5 年發布的現代瀏覽器。這包括支援版本的 Firefox、Chrome、Edge 和 Safari。我們不主動支援 Internet Explorer。Apache Arrow 也適用於 Node 的維護版本。
更廣泛的 Apache Arrow committers 的完整列表。
更廣泛的 Apache Arrow 專案和組織的完整列表。