71
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2019-01-01

背景

大きいデータセットのアドホック分析を 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')
71
66
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?