Apache Arrow - v19.0.0

Apache Arrow in JS

npm version

Arrow 是一系列技術,使大數據系統能夠快速處理和傳輸資料。

npm install apache-arrowyarn 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]);
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 的完整列表。

  • Brian Hulette,committer
  • Paul Taylor,committer
  • Dominik Moritz,committer

由 JS 中的 Apache Arrow 驅動

更廣泛的 Apache Arrow 專案和組織的完整列表。

  • Apache Arrow -- 驅動柱狀記憶體內分析的父專案,包括附屬的開源專案
  • Perspective -- Perspective 是一個互動式分析和資料視覺化元件,非常適合大型和/或串流資料集。Perspective 利用編譯為 WebAssembly 的 Arrow C++。
  • Falcon 是一個視覺化工具,用於跨數百萬或數十億條記錄的多個聚合視覺化進行連結互動。
  • Vega 是一個用於網路上互動式視覺化的工具生態系統。Vega 團隊實作了一個 Arrow loader
  • Arquero 是一個用於查詢處理和轉換陣列後端資料表的程式庫。
  • OmniSci 是一個 GPU 資料庫。其 JavaScript 連接器返回 Arrow 資料框。

授權條款

Apache 2.0