Help us understand the problem. What is going on with this article?

PythonでcsvファイルをParquet形式に変換

背景

Kaggle で大きいデータセットの ETL を AWS Athena (クエリごとの課金サービス)で行うにあたり、csv データをApache Parquet 形式に変換することでスキャンデータを小さくすることによりコスト削減ができます。 Parquet 形式への変換はいくつか方法がありますが、今回は Python を使って行います。

ファイルを圧縮し、さらに Apache Parquet などの列形式に変換した場合、サイズは 3 分の 1 に圧縮され、Amazon S3 でのデータは最終的に 1 TB になります。ただしこの場合、Parquet は列形式なので、Amazon Athena で読み取る必要があるのは、実行されているクエリに関連する列のみです。当該のクエリは 1 つの列のみを参照するものであるため、Athena ではその列のみが読み取られ、ファイルの 3 分の 2 は読み取らなくてよいことになります。Athena で読み取られるのはファイルの 3 分の 1 のみであるため、S3 からスキャンされるデータは 0.33 TB のみになります。

参考:Amazon Athena の料金

Apache Parquetとは

Apache Parquet とは csv などの行志向のデータフォーマットと違い、列志向のフォーマットで、列単位でデータを取り出す分析用途に向いています。
参考:カラムナフォーマットのきほん 〜データウェアハウスを支える技術〜

Python における Parquet フォーマットのファイルサイズや読み込み時間の比較は下記の記事がとても参考になります。
参考:Python: Apache Parquet フォーマットを扱ってみる

手順

parquet への変換は pyarrow を使用します。

# pyarrow のインストール
$ pip install pyarrow
# Parquetフォーマットへの変換
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

df = pd.read_csv('../data/raw/train.csv')
table = pa.Table.from_pandas(df)
pq.write_table(table, '../data/processed/train.parquet')
TaigoKuriyama
主に機械学習、クラウド、Kaggle、AtCoder に関するブログを書いています。
https://www.hellodatascience.work
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away