今日もデータで飯を食う。

今日もデータで飯を食う。

僕の脳内会議議事録なので悪しからず

謎のデータフォーマットparquet試してみた結果

f:id:danbonist:20171001150109p:plain

初めて聞いたparquetというデータ形式がどうやらこれから来そうなので簡単に試してみたという話

分散処理ってすごいらしいじゃん

先日PyData.Tokyoに参加してきました。 pydatatokyo.connpass.com

分析するときは基本的にpandasオンリーでメモリにどかっと読み込んでやってしまうことがほとんどなんですが、 たまに1億レコードくらいのデータをピボットしたりジョインしたりするとメモリからはみ出してしまうので、 なんとかならんものか、でもSparkとか新しく覚えるのめんどい、と思っていたのでPySparkの話を聞いてきました。

PySparkって遅いんじゃないの?

PySpark自体は数年前から知ってはいたのですがかなり遅いという話があったので、使ってもなかったのですが、 どうやらここ数年で結構進化したらしいです。詳しくは以下のスライド参照

www.slideshare.net

www.slideshare.net

とりあえずやってみた

んで、発表の中で****なるフォーマットをみんな幸せになれるよ的な話だったので、あまり情報もないみたいですし自分でどんなもんか試してみました。とりあえずconda install pyarrowでなんかすごいらしいパッケージを入れて実行です。

output performance test

結果

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貼り付け」から使うにはパブリックにしないとダメっぽいです。 それにしてもはてなはエンジニアの人がみんなやっているだけあってめちゃ使いやすいなぁと改めて思います。