(1) データの展開とファイル分割
例として「wls_day-07.bz2」331MBのデータを使ってみます。まずはbz2を展開していきます。僕はLinuxまたはMacのターミナルで実行しました。bunzip2 コマンドを使います。結構時間がかかります。僕の環境では3分程度です。
$ bunzip2 wls_day-07.bz2
展開したファイル名は「wls_day-07」展開後の容量は10.1GBでした。このファイルの中身はjson形式となっています。このファイルを直接開こうとしても、通常のPCではメモリエラーになってしまい開くことができません。そこで500万行ずつ程度にこのファイルを分割します。
split -l 5000000 wls_day-07 wls_day-07_5000000
完了すると、今回は10個のファイルになり、末尾にaaなどがつきます。
(2) jsonデータからcsvに変換
jsonデータ形式は情報量も多く扱いやすいのですが、今回のようなデータではcsvに変換して、データを開きやすくした方が全体を扱えるのでいいと思います。一つずつファイルを取り込み、一つのcsvファイルにします。分割されたファイルが10個あるので、MPIで10プロセス発生させ、それぞれのプロセスで取り込んだものをrank0のプロセスが集約するようにします。一つのプロセスで時間かけてやってもよいと思います。
この処理には相当大きなメモリが必要となります。最低100GB程度あるサーバで実行して下さい。今回jsonで取り込んで、pandasでデータフレーム形式に変換して、そのあとcsvに保存するようにしました。
ソースコード(HostEvents_CSV_MPI.py)
集約ができると「wls_day-07_all.csv」が作成されます。僕の環境だと10分程度かかりました。容量は4.3GBとなり10.1GBから半減しています。これを試しに取り込んでみます。
少し時間はかかりますが、jupyterの環境でも無事取り込むことができました。今回の1日分は4500万行程度でした。ここまでで1日分のHost Events Dataを取り込むことが出来ましたので、次はこれの基本分析を行なっていきます。
0 件のコメント:
コメントを投稿