ビッグデータを扱うための話

Pythonによるデータ加工での大容量csvの扱い」のような質問を見かけたので、回答を載せておく。普通には扱いないサイズの、ビッグデータを処理するための汎用的な話を残しておきます。

ビッグデータを扱うには、元となるデータを一度に処理可能な量(数十MB程度)に分割して処理を行うバッチ処理か、最小単位のデータ(1行)毎に処理を行うストリーム処理の何れかになります。

ビッグデータを処理するための環境として知られているApatch Hadoopは前者を、RDBに対するSQL文の処理などは後者の方法を使っています。

一行ずつのデータに対して処理を行う場合には、バッチ処理でもストリーム処理でも良いのですが、複数の行にまたがった計算処理を行う場合にはバッチ処理でないと難しくなります。例えば時系列にそった移動平均を計算しようとするなら、元となるデータを時系列順に並び替えなくてはなりません。ですが並び替える処理は多くのメモリを使用するため、データ量が多いと一度にはできません。こういう部分はストリーム処理では実装が難しくなります。

またビッグデータの処理では、どのような中間データを出力するかが肝になります。移動平均を算出する場合には「順不同の元データ→各月毎のデータに分割→各月毎のデータを並び替え→月毎のデータを結合→移動平均算出」のように、何段階かのバッチ処理に分ける必要があるでしょう。この時に汎用性を考えた中間データを作成しておかないと、異なる集計を行う場合に最初からやり直すために、多くの時間がかかる事になります。

Hadoopのプログラムを作るときのMap/Reduceの考え方は、Hadoop以外にも適用できるので、ビッグデータを処理する機会があるならば、Hadoopを使ってみることをお勧めします。既存の仮想マシンのイメージをダウンロードして使うなら、インストールに手間もかかりません。開発言語もJavaに限りません。コンソールからの入出力を処理できる開発言語なら何でも使えます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です