wukongを使って住所の表データをツリーデータに変換
wukongを使って、表状態になっている住所データから、住所の要素それぞれの下位ノードが分かるツリーデータに変換してみます。
プログラム
電子国土基本図(地名情報)「住居表示住所」のCSVファイルをターゲットにして、次のようなプログラムを作成しました。
#addr.rb require 'rubygems' require 'wukong' include Wukong::Streamer class Mapper < LineStreamer def process l r = l.strip.split(',') yield [r[0], r[1]] yield [r[0..1].join('/'), r[2]] yield [r[0..2].join('/'), r[3]] yield [r[0..3].join('/'), r[6..8].join(',')] end end class Reducer < ListReducer def finalize yield [key, values.map(&:last).uniq.sort.join(',')] end end Wukong::Script.new(Mapper, Reducer).run
実行例:
$ ruby addr.rb src/j14101k_20110118.csv 14101.tsv
これで、作成された tsv ファイルには、次のデータが用意されます。
- 市区町村コードに対して、町又は字名のリスト
- 市区町村コード/町又は字名に対して、街区符号のリスト
- 市区町村コード/町又は字名/街区符号に対して、基礎番号のリスト
- 市区町村コード/町又は字名/街区符号/基礎番号に対して、経度、緯度及び地図情報レベル
こういったデータをワンパスで作成できるところが、MapReduce 方式の利点です。