pyarrowを試してみた

pyarrowでのparquetの読み込みとDataFrameへの変換のパフォーマンスを確認してみた。

parquetは読み込みは当然csvよりも早いけど。DataFrameへの変換が遅いのでpandasの壁は越えられない…

内容はGetting Startedそのまま

データセット: Uber Pickups in New York City

パターン

  • CSVを読み込んでDataFrameへ変換
  • Parquetを読み込み
  • Parquetを読み込んでDataFrameへ変換
import pyarrow as pa
import pandas as pd
import pyarrow.parquet as pq

CSV = 'uber-raw-data-janjune-15.csv'
PARQUET = 'uber-raw-data-janjune-15.parquet'

df = pd.read_csv(CSV)
pq.write_table(pa.Table.from_pandas(df), PARQUET)
!ls -lh uber-raw-data-janjune-15.*

    -rwxr-xr-x@ 1 kazup0n  staff   526M 11 13 19:30 [31muber-raw-data-janjune-15.csv[m[m
    -rw-r--r--  1 kazup0n  staff    69M  2 19 01:57 uber-raw-data-janjune-15.parquet
from time import time

def bench(proc, label):
    start = time()    
    proc()
    end = time()
    print('{}@{}'.format(label, end-start))

def read_and_to_df():
    table = pq.read_table(PARQUET)
    table.to_pandas()
                       
    

bench(lambda : pd.read_csv(CSV), 'csv')
bench(lambda : pq.read_table(PARQUET), 'parquet')
bench(read_and_to_df, 'read_and_to_df')

csv@10.470412969589233
parquet@5.245838642120361
read_and_to_df@10.890496969223022