謎のデータフォーマットparquet試してみた結果
初めて聞いたparquetというデータ形式がどうやらこれから来そうなので簡単に試してみたという話
分散処理ってすごいらしいじゃん
先日PyData.Tokyoに参加してきました。 pydatatokyo.connpass.com
分析するときは基本的にpandasオンリーでメモリにどかっと読み込んでやってしまうことがほとんどなんですが、 たまに1億レコードくらいのデータをピボットしたりジョインしたりするとメモリからはみ出してしまうので、 なんとかならんものか、でもSparkとか新しく覚えるのめんどい、と思っていたのでPySparkの話を聞いてきました。
PySparkって遅いんじゃないの?
PySpark自体は数年前から知ってはいたのですがかなり遅いという話があったので、使ってもなかったのですが、 どうやらここ数年で結構進化したらしいです。詳しくは以下のスライド参照
www.slideshare.netwww.slideshare.net
とりあえずやってみた
んで、発表の中で****なるフォーマットをみんな幸せになれるよ的な話だったので、あまり情報もないみたいですし自分でどんなもんか試してみました。とりあえずconda install pyarrow
でなんかすごいらしいパッケージを入れて実行です。
結果
CSV出力に比べた比率でみると以下のような結果になりました。
フォーマット | ファイルサイズ | 処理時間 |
---|---|---|
50% | 3.3% | |
pickle | 80% | 1.0% |
仕事でデータの中身まで見ることがありそうな場合はCSV出力しておき、それ以外は基本的にシリアライズでアウトプットしておくというようにやっていたのですが、この結果を見るに処理時間とデータ圧縮具合両面では良さそうですね。これで出力しておけばPySparkとかにも食わせるのが楽っぽいので、今後の分散化処理時代到来を考えるととりあえずで出力しておくのはいいかもしれません。今度はPySparkを動かすところもやってみようかなと思います。
ちなみに昨日登壇された玉川さんがQiitaに次の記事も書いているので、このあたりもチェックすると全体像が把握できると思います。pandas作った人のblogの翻訳らしいです。 qiita.com
まぁめんどくさがりな人間からすると分析やる側に分散するとかしないとか意識させないでよろしくやってくれよ、とは思いますがデータサイエンティスト(本物)になるにはエンジニアリングの理解も必要不可欠ですね。
(余談)JupyterNotebokの貼り方
jupyter notebookをキレイに貼り付けられんもんかなと思って以下を参考にさせてもらいました。 mashiroyuya.hatenablog.com なんか僕の環境ではとりあえずGistにipynbファイルを放り込むだけで良かったのでめちゃ簡単でした。 ただしはてなのサイドバーにある「Gist貼り付け」から使うにはパブリックにしないとダメっぽいです。 それにしてもはてなはエンジニアの人がみんなやっているだけあってめちゃ使いやすいなぁと改めて思います。