case-kの備忘録

日々の備忘録です。データ分析とか基盤系に興味あります。

GCSのファイルをDataFrameで扱う方法

JupyterでGCSにあるファイルを読み込み、DataFrameとして扱う方法を紹介します。サーバにいちいちデータを落としたくない場合やディスク容量がない場合に使えるかもしれません。いつも通り完全に備忘録です。

#ライブラリ
$ pip install google-cloud-storage
from google.cloud import storage as gcs
import pandas as pd
from io import BytesIO

bucket_name = "[bucket name]"
file_name = "[file path ]"
project_name = "[project id]"

# create gcs cliaent
client = gcs.Client(project_name)
bucket = client.get_bucket(bucket_name)
# create blob
blob = gcs.Blob(file_name, bucket)
content = blob.download_as_string()
train = pd.read_csv(BytesIO(content))
train.head()

f:id:casekblog:20190217000715p:plain

こんな感じでDataFrameとして扱えます。CLIでGCSから、サーバーにファイルを落としたいなら、このコマンドです。好みですかね。Kaggleのeloコンペメダル欲しいなあ。

#  gsutil -m cp  [copy file path] [path]
$ gsutil -m cp 'gs://kagg-bucket/elo/elo-merchant-category-recommendation/train.csv' ./
Copying gs://kagg-bucket/elo/elo-merchant-category-recommendation/train.csv...
/ [1/1 files][  8.0 MiB/  8.0 MiB] 100% Done

GCSに書き込むにはローカルのファイルパスを指定してあげる必要があるようです。
Dataflowを使ってサイズの大きいファイルを分割する処理をしたかったのですが、
サーバレスなのでうまく行きませんでした。出力結果をまとめたくない場合など用途によっては
Dataprocとう使うのもありだと思いました。

参考
sleepless-se.net

cloud.google.com