非構造化CSVファイルを処理するためにhadoopを使用したいと思います。これらのファイルは、さまざまな行の長さを持つ異なるタイプの複数のデータ値を含むという意味では構造化されていません。さらに、これらのファイルは数百種類あり、サイズが比較的大きいことが多い(> 200Mb)。Hadoop + MapReduceで非構造化データを処理する
各ファイルの構造はそうのように証明することができる。
Book , ISBN , BookName , Authors , Edition
Book , 978-1934356081, Programming Ruby 1.9 , Dave Thomas, 1
Book , 978-0596158101, Programming Python , Mark Lutz , 4
...
BookPrice, ISBN , Store , Price
BookPrice, 978-1934356081, amazon.com , 30.0
BookPrice, 978-1934356081, barnesandnoble.com , 30.67
BookPrice, 978-0596158101, amazon.com , 39.55
BookPrice, 978-0596158101, barnesandnoble.com , 44.66
...
Book , ISBN , BookName , Authors , Edition
Book , 978-1449311520, Hadoop - The Definitive Guide, Tom White , 3
...
ファイルが自動的に生成された、と私は与えられた構造を制御することはできませんされています。基本的に、ヘッダー行に続いて、ヘッダーに一致する値を含むデータ行が続きます。行のタイプは、カンマで区切られた最初の単語で識別できます。この例から、Book
行には書籍(名前、isbn、著者、エディション)に関するメタデータが含まれ、BookPrice
にはさまざまなアウトレット/ベンダーの書籍のさまざまな価格が含まれています。
Map/Reduceを使用してデータの集計計算を行う方法を理解しようとしています。データが構造化されていることにより、各フェーズで抽出するペアをkey -> value
として理解するのが難しくなります。
は、例えば、私は、各書籍のAVERAGE、MAXとMIN料金を計算したい(接合することができる/ ISBNでグループ化されました)。注文した1種類のCSVファイルにそのデータを抽出してそこから作業する(grep、python、awkなどを使用して)いくつかの前処理を行うことができますが、それはM/R + Hadoopを使う点を打ち破ります多くの追加作業が必要になります。
私は複数のマップステージを使用することを考えましたが、私はこれをかなり新しく、どのように/どこから始めるべきかわかりません。
サンプルファイル/クエリに対してこのようなM/Rジョブ(Java)を実装するにはどうすればよいですか?ありがとう。
非常にクールなアプローチ、ありがとう。あなたの実際の実装の詳細/コードのいくつかを共有してもよろしいですか? – sa125
私は気にしません。私に電子メールを送り、私は助けてうれしい。 –
Davidどのようにファイルからヘッダを分離したのですか?http://stackoverflow.com/questions/21040166/aggregation-in-mapreduce –