「PythonでApache Arrow形式のデータを処理したい」
「Pythonでビッグデータを高速に対応したい」
「インメモリの列指向で大量データを扱いたい」
このような場合には、Pyarrowがオススメです。
この記事では、Pyarrowについて解説しています。
本記事の内容
- Pyarrowとは?
- Pyarrowのシステム要件
- Pyarrowのインストール
- Pyarrowの動作確認
それでは、上記に沿って解説していきます。
Pyarrowとは?
Pyarrowは、Apache Arrow形式ファイルを扱うためのPythonライブラリです。
Apache Arrow形式は、列(カラム)指向データ構造となります。
これに対して、リレーショナル・データベースは行指向のデータ構造となります。
おそらく、行指向のデータ構造の方が見慣れたモノでしょう。
ただ、行指向のデータ構造だと速度の面で問題が出てきています。
その問題を列指向データ構造は解決します。
つまり、列指向データ構造は大量データを高速に処理できるということです。
Pythonでは、機械学習の処理を行う際にビッグデータを扱うことが多いです。
また、統計や分析でも大量のデータを扱うことは多いでしょう。
そんな場合には、インメモリの列指向データ処理は効果を発揮します。
そして、そのときにPyarrowが大活躍するということです。
以上、Pyarrowについて説明しました。
次は、Pyarrowのシステム要件を確認します。
Pyarrowのシステム要件
現時点(2022年3月)でのPyarrowの最新バージョンは、7.0.0となります。
この最新バージョンは、2022年2月4日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
サポート対象となるPythonのバージョンは、以下となっています。
- Python 3.7
- Python 3.8
- Python 3.9
- Python 3.10
Pyarrowは、以下のPython公式開発サイクルに準じています。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
まだまだ、Python 3.6をサポートするライブラリは多く存在します。
逆に、Python 3.10に未サポートのライブラリも多くあります。
そんな中で、Pyarrowは適切にPython公式開発サイクルとリンクしています。
こういうのを見ると、Pyarrowというライブラリへの信用度がUPします。
以上、Pyarrowのシステム要件を説明しました。
次は、Pyarrowをインストールします。
Pyarrowのインストール
検証は、次のバージョンのPythonで行います。
$ python -V Python 3.10.2
まずは、現状のインストール済みパッケージを確認しておきます。
$ pip list Package Version ---------- ------- pip 22.0.4 setuptools 60.9.3 wheel 0.36.2
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、Pyarrowのインストールです。
Pyarrowのインストールは、以下のコマンドとなります。
pip install pyarrow
インストールには、それほど時間がかかりません。
終了したら、どんなパッケージがインストールされたのかを確認します。
$ pip list Package Version ---------- ------- numpy 1.22.3 pip 22.0.4 pyarrow 7.0.0 setuptools 60.9.3 wheel 0.36.2
Numpyに依存していることが確認できます。
Numpyについては、次の記事で説明しています。
それ以外には、Pyarrowが依存するパッケージはありません。
その意味では、比較的容易に既存環境へのPyarrowを導入できそうです。
以上、Pyarrowのインストールを説明しました。
次は、Pyarrowの動作確認を行います。
Pyarrowの動作確認
Apache Arrowの特徴である列指向データストアを確認します。
行指向であれば、5行分となるデータを作成します。
そのためのコードが、以下。
5人分の誕生日を列指向でメモリ上に作成します。
import pyarrow as pa days = pa.array([1, 12, 17, 23, 28], type=pa.int8()) months = pa.array([1, 3, 5, 7, 1], type=pa.int8()) years = pa.array([1990, 2000, 1995, 2000, 1995], type=pa.int16()) birthdays_table = pa.table([days, months, years], names=["days", "months", "years"]) print(birthdays_table)
上記を実行すると、以下の結果となります。
pyarrow.Table days: int8 months: int8 years: int16 ---- days: [[1,12,17,23,28]] months: [[1,3,5,7,1]] years: [[1990,2000,1995,2000,1995]]
メタデータ部分が、以下の部分です。
pyarrow.Table days: int8 months: int8 years: int16
そして、列指向で保存されている実データが以下の部分となります。
days: [[1,12,17,23,28]] months: [[1,3,5,7,1]] years: [[1990,2000,1995,2000,1995]]
とりあえず、Pyarrowの動作確認としてはこれで十分でしょう。
速度の検証は、別途行いたいと思います。
以上、Pyarrowの動作確認を説明しました。