予め断っておくが、答えはない。むしろ質問で、以下の様なニーズを満たすソリューションはないものかと探している。
まあ、bigqueryなどにデータを入れる前に、データを適切な形にする前処理ストの為の適切なツールは何かという問いだ。
汚いデータは当たり前
最近ニコニコデータセットを、BigQueryに入れようとして、悪戦苦闘している。
特にコメントには苦労する。大体この手のユーザーが自由に入力出来る系のデータは、仕様通りにデータは入っていた試しが無い。
例えば、タブ区切りでコメントデータを用意してインポートしたところ次のようなデータが見つかった。
本来データが入るところに改行記号が大量に入っているそのためパースに失敗し、BigQueryのロードが止まる。
エラーハンドリングを、何万とかに設定してもエラーで止まる。最終的に、エラーが9千万あっても無視するようにしてデータを入れた。
簡単に前処理がしたい
このような場合に備えて簡単に前処理がしたい。
pythonの擬似コードで書くとこんな感じ
import re
def remove_char(line): #手軽に関数化
return re.sub('[\n\t]','',line)
lines=read('gs://foo/bar.*.gz') #手軽にデータを読める
lines=[remove_char(l) for l in lines] #大量の処理をするのに上で定義した関数が使える
save(lines,"gs://dest/bar.*.gz") #手軽にデータを書き出せる
みたいな感じで、ファイルの分散はよきに計らってくれて、開発者は、ロジックにだけ集中すれば良いようなのがあると良いな。
そういうのどういうのがあるか教えてほしい。
こういうのだったら嬉しい。
- Google Cloud Storage(gcs)のファイルを直接読んで、結果を直接gcsに書き出せる
- 基本的にやりたい処理の部分を書けば後はそのフレームワークが面倒を見てくれる。
- ユーザー独自の関数を簡単に利用できる。上の例でのremove_charみたいな処理が簡単に出来る
googleの今度出すGoogle Cloud DataFlowがそんな感じだと良いな。
あるいはapache sporkがそんな感じだろうか(gcsがs3だと思うが)。
昔だったらpigを使っていたと思うが、最近はとんと見かけない。
SQLを使っても出来るだろうが、ロジックの部分が綺麗にかけないことが多い。