2012-03-20 9 views
2

非構造化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として理解するのが難しくなります。

は、例えば、私は、各書籍のAVERAGEMAXMIN料金を計算したい(接合することができる/ ISBNでグループ化されました)。注文した1種類のCSVファイルにそのデータを抽出してそこから作業する(grep、python、awkなどを使用して)いくつかの前処理を行うことができますが、それはM/R + Hadoopを使う点を打ち破ります多くの追加作業が必要になります。

私は複数のマップステージを使用することを考えましたが、私はこれをかなり新しく、どのように/どこから始めるべきかわかりません。

サンプルファイル/クエリに対してこのようなM/Rジョブ(Java)を実装するにはどうすればよいですか?ありがとう。

答えて

3

私は同じような場合に直面し、次のデザインを行いました:
実際にレコードを分割するためにOpenCSVパーサーを使用する入力フォーマットを開発しました。その後、 私は値としてMapWritableを塗りつぶしました。各マップには、「fieldName-> field value」というエントリを持つレコードが1つ含まれています。あなたのケースで
私は等「著者レコード」

その後

あなたが興味や集計のレコードを認識して、比較的簡単なコードを書くことができマッパーで「価格レコード」、のようなレコードタイプを含む列挙子のような主要なものになるだろうそれら。

もう少し複雑ですが、Hive用のSerDeを作成することでより複雑なやり方があります。これは、ファイルを構造体のテーブルにマップします:レコードタイプ(上記)とKeyValueMapカラム。 (列のハイブサポートマップタイプ)。そうすれば、半構造化データに対してSQLを作成することができます。

+0

非常にクールなアプローチ、ありがとう。あなたの実際の実装の詳細/コードのいくつかを共有してもよろしいですか? – sa125

+0

私は気にしません。私に電子メールを送り、私は助けてうれしい。 –

+0

Davidどのようにファイルからヘッダを分離したのですか?http://stackoverflow.com/questions/21040166/aggregation-in-mapreduce –

関連する問題