検索
連載

Pythonから利用できるRust製超高速データ分析ライブラリPolarsの実力Rustで始めるWebアプリケーション(終)

RustでWebアプリケーションを開発する際に基礎となる要素技術からRustの応用まで、Rustに関するあれこれを解説する本連載。第3回は、Rust製の高速データ分析ライブラリであるPolarsの速度を簡易的に検証し、考察する。

Share
Tweet
LINE
Hatena

 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.

ページトップに戻る