Apache Arrow 須藤功平株式会社クリアコード RubyData Tokyo Meetup Apache Arrow Powered by Rabbit 2.2.2

Similar documents
はじめに 私は Ruby が好きだ だからデータ分析だって Ruby でやりたい Ruby よりも向いている言語があるのはわかっているけどさー

Apache Arrow の Ruby バインディングを GObject Introspection で 須藤功平株式会社クリアコード 名古屋 Ruby 会議 Apache Arrow の Ruby バインディングを GObject Introspection で Pow

テーマ コミュニティーとビジネス

Joint Content Development Proposal Tech Docs and Curriculum

PowerPoint Presentation

祝! リリース! 1/69

CouchbaseLiveTokyo2015 講演資料

よく活用された Redmine 情報の宝庫問題解決の経緯 Wiki に整理したノウハウ

Ruby を使った分散全文検索ミドルウェア 須藤功平株式会社クリアコード RubyWorld Conference /11/13 Ruby を使った分散全文検索ミドルウェア Powered by Rabbit 2.1.4

Oracle Database 12c

話すこと (Topics) 私とテスティングフレームワーク (Testing frameworks and I) テスティングフレームワークの作り方 (how to create testing frameworks) 1/42

製品開発の現場では 各種のセンサーや測定環境を利用したデータ解析が行われ シミュレーションや動作検証等に役立てられています しかし 日々収集されるデータ量は増加し 解析も複雑化しており データ解析の負荷は徐々に重くなっています 例えば自動車の車両計測データを解析する場合 取得したデータをそのまま解析

untitled

PHP 開発ツール Zend Studio PHP アフ リケーションサーハ ー Zend Server OSC Tokyo/Spring /02/28 株式会社イグアスソリューション事業部

Windowsユーザでも 手軽に作れるiPhoneアプリ

16soukatsu_p1_40.ai

Microsoft Word 基_シラバス.doc

20th Embarcadero Developer Camp

WEBサービス超入門 mask.key

PowerPoint Presentation

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

自 己 紹 介 冨 田 昌 宏 ( 株 ) 富 士 通 システムズ イースト 長 野 勤 務 OSS 推 進 フォーラム アプリケーション 部 会 に 参 加 1998 年 から 個 人 的 にRubyを 使 用 2003 年 からRubyで 製 品 開 発

データセンターの効率的な資源活用のためのデータ収集・照会システムの設計

S2Pradoの紹介

iNFUSE インフューズ

1. 52

扉 序文 目次DVD用 .indd

すぐできる冬の省エネ・節電ガイド

”Žfi¶‰s‚ÒŒh”~”ŒŠá‘WŁ\”ƒ



Ruby 2.3 のてざわり新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会

iNFUSE インフューズ

1. 開発ツールの概要 1.1 OSS の開発ツール本書では OSS( オープンソースソフトウェア ) の開発ツールを使用します 一般に OSS は営利企業ではない特定のグループが開発するソフトウェアで ソースコードが公開されており無償で使用できます OSS は誰でも開発に参加できますが 大規模な

平成22年度「技報」原稿の執筆について

全文検索 Google Bing が提供している機能

無料で多機能な OSS の ETL ツール Kettle を使ってみよう! 情報政策課技術職員金森浩治 1. はじめにデータ処理を行うにあたって非常に便利なツール ETL 本稿では OSS の ETL Kettle の機能とその使用方法を紹介します 2. 用語説明 2.1 OSS とは? OSS と

5th CodeGear Developer Camp [A5]

PHP で PostgreSQL と PGroonga を使って高速日本語全文検索! 須藤功平 クリアコード 第 115 回 PHP 東京 PHP で PostgreSQL と PGroonga を使って高速日本語全文検索! Powered by Rabbit 2.

tokyo_t3.pdf

Windows Server 2012/2012 R2 Active Directory環境へのドメイン移行の考え方

スライド 1

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

PowerPoint プレゼンテーション

オープンオフィス 3 入門ガイド - Calc: データを整理する このドキュメントは クリエイティブ コモンズに表示される帰属 日本のライセンスのもと提供しています このドキュメントの Web 版を OpenOffice.org 日本ユーザー会のドキュメントで公開しています http:

5-3- 基統合開発環境に関する知識 1 独立行政法人情報処理推進機構

フレームワーク再考

使える! IBM Systems Director Navigator for i の新機能

GTC Japan, 2018/09/14 得居誠也, Preferred Networks Chainer における 深層学習の高速化 Optimizing Deep Learning with Chainer

Microsoft Word - CygwinでPython.docx

PowerPoint プレゼンテーション

自己紹介 日本電気株式会社情報 ナレッジ研究所 須堯一志 ( すぎょうかずし ) 主にネットワークのプロトコルを開発している技術者 1997 年に IPv6 のプロトコルスタック開発を通じてオープンソース開発に関わる 2009 年頃から OpenFlow に関わる 2011 年 Trema がオープ

5-3- 応統合開発環境に関する知識 1 独立行政法人情報処理推進機構

VVB6システムからSeasar2を用いたWebシステムへの移植

斎藤参郎 データサイエンス A 2018 年度水曜日 2 限目 (10:40-12:10) 0. イントロダクション 講義の進め方 担当昨年度より 講義の方針 1) 自宅でも学習できる 2) 様々なデータ分析手法を自分でインストールし 実験できる 環境の紹

PowerPoint プレゼンテーション

2

目次 1. はじめに エンドポイント 利用開始まで ユーザー登録 CLI ツールのインストール CLI ツールのインストール RubyGems のインストール CL

プログラミング基礎I(再)

TopSE並行システム はじめに

自己紹介 2 上田 和樹 JaSST 北海道実行委員 TEF 道 札幌で活躍するアマチュアミュージシャン兼ソフトウェアエンジニア

PowerPoint プレゼンテーション

OSSTechプレゼンテーション

Python Perl JavaScript および PHP などの ランザクション ID を利用することで 重複する処理 な Tuple が流れるかはグルーピングより決定されま 多くの言語をサポートしています を判別することができます す 6 簡単なデプロイと運用 は簡単にデプロイし 動作させるこ

ジョブ管理ソフトウェア LoadStar Scheduler ご紹介資料 ~ システム運用品質の向上とコスト削減を実現 ~

OSS Mtg

untitled

IBM 次世代クラウド・プラットフォーム コードネーム “BlueMix”ご紹介

Oracle Cloud Adapter for Oracle RightNow Cloud Service

WBT [6] [7] [8] [9] Web [1] WBT [2] [3] ipad PC ipad ipad ipad [4] QR QR [5] IC IC PDA IC PDA US-ASCII 4,296 QR IC IC IC QR QR QR A BB A A CC

Samba/LDAPによるWindowsドメイン管理権限の分離と委譲

Automation for Everyone <デモ で実感できる、組織全体で活用できるAnsible Tower>

IBM Cloud Social Visual Guidelines

Sequel のすすめ 私が SQL を嫌いな理由 とみたまさひろ RubyHiroba Sequel のすすめ - 私が SQL を嫌いな理由 Powered by Rabbit 2.0.7

スライド 1

「RAD Studio XE5によるマルチ言語/マルチデバイス開発の進め方」

XNA Framework

JACi400のご紹介~RPGとHTMLで簡単Web化~

ORACLE Data Integrator

10th Developer Camp - B5

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

スライド 1

Oracle Business Rules

スライド 1

勉強会の流れ Google API の概要 デモ curl で実際に体験 Copyright 2010 SRA OSS, Inc. Japan All rights reserved. 2

使用する前に

HIGIS 3/プレゼンテーション資料/J_GrayA.ppt

Microsoft PowerPoint - 07.ppt [互換モード]

Microsoft PowerPoint - handout07.ppt [互換モード]

管理者から携帯電話に向けて命令や位置確認を行います 携帯電話からリアルタイムに情報をアップロードするとともに サーバ側のデータと同期をします GPS 測位を用いて 現在位置や軌跡を管理します 携帯電話からシステム契機でメールを送付します 基幹サーバと連携するためのデータファイルの出力や プリンタ連携

IBM Cloud Social Visual Guidelines

Oracle SQL Developerの移行機能を使用したOracle Databaseへの移行

EnSightのご紹介

Microsoft Word 応_シラバス.doc

ETOS 画面の Web 化 / 帳票印刷のオープン化体験お試し変換サービスのご紹介 ACOS-4 システムの業務改善提案

ACtive 010 2



好きですまえばし

Transcription:

Apache Arrow 須藤功平株式会社クリアコード RubyData Tokyo Meetup 2018-11-17

Apache Arrow 各種言語で使えるインメモリーデータ処理プラットフォーム

提供するもの 高速なデータフォーマット 高速なデータ処理ロジック 各プロダクトで個別に実装するより一緒にいいものを実装して共有しよう! 効率的なデータ交換処理...

利用例 Apache Arrow 提供 高速なデータフォーマット高速なデータ処理ロジック効率的なデータ交換処理 分散処理ツール コーディネーター ワーカー ワーカー ワーカー データ収集ツール データ前処理ツール クエリー実行エンジン 可視化ツール

大事にすること 1 効率的なデータ交換

前提 イマドキのデータ処理システムは単一コンポーネントで完結しない

複数コンポーネント メリット : コンポーネント毎に適した言語を使える デメリット : データ交換が増える ( オーバーヘッド )

データ交換コスト シリアライズコスト 転送コスト デシリアライズコスト

コスト例 :JSON シリアライズコスト [1] -#to_json-> "[1]" 転送コスト -output#write-> -input#read-> デシリアライズコスト "[1]" -JSON.parse-> [1]

コスト比較例 :JSON n = 1000000 numbers = n.times.to_a JSON.dump(numbers, json_file) JSON.load(json_file)

コスト比較例 :Apache Arrow n = 1000000 numbers = Arrow::Int32Array.new(numbers) arrow_table = Arrow::Table.new("number" => numbers) arrow_table.save(arrow_path) Arrow::Table.load(arrow_path)

コスト比較例 実行時間 JSON 比 JSON 0.099 秒 1 Apache Arrow 0.002 秒 1/50

データ交換コストの影響 コンポーネント数と正の相関 コンポーネントが増えると無視できない データ量と正の相関 データが多くなると無視できない

まとめ イマドキのデータ処理システムで大量データを処理するならデータ交換コストを無視できない Apache Arrowはデータ交換コストが低い 仕組みは後述

大事にすること 2 各種言語で使えること

各種言語 Java, C++, Python, C, Ruby, Lua, JavaScript, Go, Rust, MATLAB, R, C#

イマドキのデータ処理システム コンポーネント毎に適した言語を採用 採用言語でApache Arrowを使えないとシステムでApache Arrowを使えない Apache Arrow に対応していればコンポーネントでその言語を採用しやすい Rails が活きるコンポーネントで Ruby を使うとか

実現方法 ネイティブ実装 Java, C++, JavaScript, Go, Rust, C# メリット : 扱いやすい ( インストールが楽とか ) C++ 実装のバインディング Python, C, Ruby, Lua, MATLAB, R メリット : 高速 実装の共有

まとめ Apache Arrowは各種言語で使える Ruby と他の言語でのデータ交換が楽になる Ruby 実装はC++ 実装のバインディング 速い 豊富な機能 (C++ 実装はすごく進んでいる )

大事にすること 3 速いこと

速さが必要な理由 大量のデータを処理するためポイント : 大量データ前提の設計

速いデータフォーマット パースせずに使えるデータフォーマット メモリー上で効率よく扱える並びでデータを配置 パースしなくてよいし そのまま使っても速い 既存のデータの並びと互換性あり 例 :NumPyの数値配列と互換 互換性があるとゼロコピーで使える

速いデータ処理 SIMD キャッシュメモリー マルチコアで高速化 データをアライン 局所化 リードオンリーに 高速な式評価器 式 :column1 + column2 みたいなやつ if とかも使える Gandiva: 式を JIT コンパイルして実行

データ処理例 :Ruby n = 100000 ruby_table = n.times.collect do { "number1" => rand, "number2" => rand, } end ruby_table.collect do record record["number1"] + record["number2"] end

データ処理例 :Numo::NArray n = 100000 numo_number1 = Numo::DFloat.new(n).rand numo_number2 = Numo::DFloat.new(n).rand numo_number1 + numo_number2

データ処理例 :Gandiva n = 100000 arrow_number1 = Arrow::DoubleArray.new(n.times.collect {rand}) arrow_number2 = Arrow::DoubleArray.new(n.times.collect {rand}) arrow_table = Arrow::Table.new("number1" => arrow_number1, "number2" => arrow_number2)

データ処理例 :Gandiva # 次のリリースまでにいい感じに書けるようにする予定 schema = arrow_table.schema expression = Gandiva::Expression.new("add", [schema[:number1], schema[:number2]], Arrow::Field.new("sum", :double)) projector = Gandiva::Projector.new(schema, [expression]) arrow_table.each_record_batch do record_batch projector.evaluate(record_batch) end

データ処理例 実行時間 Ruby 比 Ruby 0.010247 秒 1 Numo::NArray 0.000158 秒 1/67 Gandiva 0.000459 秒 1/25 Numo::NArray がすごくがんばっている

速いデータ交換 同一マシン上での交換 メモリーファイルシステム上に置いて mmap Plasma: データ共有サーバーを動かしてIPC Inter-Process Communication 別マシン上での交換 Arrow Flight:gRPC ベースの RPC フレームワーク

GPU で速い Plasma:GPU 対応 RAPIDS:NVIDIA の GPU をデータサイエンスで活用するためのプロジェクト libgdf:apache Arrowフォーマットのデータを GPUで扱うデータフレームライブラリー Rubyバインディングはまだない

まとめ Apache Arrowは速い 速いデータフォーマット 速いデータ処理 ( もっと速くなるはず ) 速いデータ交換 今後 GPU ももっと活用していく

Apache Arrow のこれから例 データフォーマットの相互変換強化

相互変換 :Apache Parquet # Apache Arrow Apache Parquet arrow_table.save("data.parquet") # Apache Parquet Apache Arrow Arrow::Table.load("data.parquet")

相互変換 :Feather # Apache Arrow Feather arrow_table.save("data.feather") # Feather Apache Arrow Arrow::Table.load("data.feather")

相互変換 :Apache ORC # Apache ORC Apache Arrow Arrow::Table.load("data.orc")

相互変換 :CSV # Apache Arrow CSV arrow_table.save("data.csv") # CSV Apache Arrow Arrow::Table.load("data.csv")

CSV 読み込み例 # 標準ライブラリー (Ruby 実装 ) CSV.foreach(path) { row row} # 拡張ライブラリー Ccsv.foreach(path) { row row} # C++ 実装 Arrow::Table.load(path, use_threads: true)

CSV 読み込み時間 実行時間 csv 比 csv 0.818315 秒 1 ccsv 0.064988 秒 1/13 Apache Arrow 0.009030 秒 1/90

相互変換 :Ruby オブジェクト Ruby バインディング限定 # Active Record Apache Arrow User.all.to_arrow # Numo::NArray Apache Arrow narray.to_arrow # NMatrix Apache Arrow matrix.to_arrow

相互変換の今後 JSON Apache Arrow Apache Avro Apache Arrow

Apache Arrow のこれから ( もっと ) RDBMS 連携強化 PostgreSQL MySQLでの実行結果を Apache Arrowフォーマットで返す テンソルサポート強化...

Ruby バインディングの今後 Plasma 対応 GandivaバインディングのAPIをいい感じに バインディングフレームワークの高速化一緒に開発しようぜ!

Apache Arrow と Ruby まわりの今後 libgdf の Ruby バインディング開発 gumath/xnd/ndtypes との連携 一緒に開発しようぜ!

おしらせ 1 コード懇親会 ( 今日の懇親会 ) 興味がでてきたプロダクトのコードを一緒に触ってみよう! 開発に参加したくなるかも! https://github.com/speee/code-party/tree/ master/rubydata-tokyo-meetup-2018

おしらせ 2 OSS Gate 東京ミートアップ for Red Data Tools in Speee 2018-11-20 19:30-( 来週の火曜日 ) Red Data Tools メンバーが開発する集まり https://speee.connpass.com/event/105237/

おしらせ 3 Apache Arrow 東京ミートアップ 2018 2018-12-08 13:30- 目的 : 開発者を増やす 対象プロダクト :Apache Arrow Red Data Tools Ruby/Numo SciRubyなど https://speee.connpass.com/event/103514/