Pythonから利用できるRust製超高速データ分析ライブラリPolarsの実力:Rustで始めるWebアプリケーション(終)
RustでWebアプリケーションを開発する際に基礎となる要素技術からRustの応用まで、Rustに関するあれこれを解説する本連載。第3回は、Rust製の高速データ分析ライブラリであるPolarsの速度を簡易的に検証し、考察する。
paizaでWebエンジニアをやっています藤田と申します。前回の連載では、RustでWebアプリの基礎となるセッション管理と、SNSのAPIサーバを構築するための実装概略、Rustの強力な型システムによるサーバサイドアプリケーションの記述性について示しました。
今回は、趣向を変えてRust製の高速データ分析ライブラリである「Polars」を利用し、その速度を簡易的に検証、考察します。今回のプロジェクトもGitHubのサンプルリポジトリを用意していますので、コードを実行する際はご利用ください。
Polarsとpandas
PolarsはPythonの小規模データ分析文脈でよく用いられるpandasを強く意識したライブラリです。pandasがパンダならば、それに対してPolarsはホッキョクグマというわけです。
どちらも「データフレーム」とよばれる抽象データ型が使いやすいインタフェースを形成しており「高速にデータ処理できるExcelのような分析ライブラリ」あるいは「インメモリリレーショナルデータベース」という感じで、気軽に扱えるツールとなっています。
利用可能なデータソースとして、リレーショナルデータベースはもちろん、csvや「Microsoft Excel」「Apache Parquet」などのファイル、また「Amazon S3」などにあるデータを扱うことができる点も共通しています。
相違点として、pandasがNumPy配列というC言語の構造体的なシンプルなデータ構造をバックエンドとして持つ一方、PolarsはApache Arrow memory modelという列指向データ構造を有しており、分析クエリに適しています。またPolarsの公式サイトではpandas含む他のデータ分析ライブラリよりも卓越した処理速度を持っていることが示されています。
さらに、Polarsにはpandasにない遅延評価や並列処理などクエリ最適化の機能が織り込まれており、計算資源を有効活用できます。一方でクエリ最適化を行えるようにする都合上pandasとはAPIが異なる部分があります(どちらかといえば大規模データ分析ライブラリの「Apache Spark」にややAPIが似ています)。そしてpandasはPythonのAPIしか提供されていませんが、PolarsはPythonおよびRustのAPIが提供されています。
探索的データ分析(Exploratory Data Analysis、EDA)をあえてRust APIで実施するといったユースケースは考えにくいため、Pythonで作成した分析、学習結果をRust製アプリケーションにシームレスに組み込むなどのユースケースが考えられるでしょう。今回はRustからの利用についても試してみます。
今回の試験の実行環境
パフォーマンスは実行環境に依存しますが、参考までに筆者のプログラムの実行環境を下記に示します。物理コアが16個あるので、並列処理可能だと大きく高速化できます。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- なぜ「Rustは難しい言語」とされるのか――習得の難しさとその対策をWebエンジニアが考察
Web開発者としての興味、関心に基づきRustを端的に紹介し、その強みや弱みについて理解を深める本連載。第3回は、Rustの開発生産性を支える言語機能と難しさについて。 - 「Rust」が開発者に最も愛される言語であり続ける理由――Rustを取り巻く状況はここ1年でどう変わったのか
人気記事を電子書籍化して無料ダウンロード提供する@IT eBookシリーズ。第69弾は、プログラミング言語「Rust」のニュース記事をeBookにまとめてお送りする。 - プログラミング言語の人気ランキング、順位変動は縮小傾向にある――RedMonkが調査
RedMonkが発表した2022年第1四半期のプログラミング言語ランキングによると、JavaScript、Python、Javaがトップ3を占めた。KotlinやRustの勢いにDartが追随していることも分かった。