はてなブックマークをブックマーク数順にソート

以前作った年間ランキングの元となったデータを,Hadoopでソートしてみた.
わざわざHadoopなど使わなくても普通にソートすればいいのだが,モノは試しということで.

入力データ

Web上のデータをひたすらscrapeしてきたものをTSVにした.ざっと表示させると,こんな感じ.

# ↓の順でTAB区切りにしています.
# URL 日付 ブックマーク数 カテゴリ タイトル タグ
$ head 2010-01-01-2010-12-31.tsv
http://getnews.jp/archives/42934	2010-01-01	364	コンピュータ・IT	 『アメーバブログ』で前代未聞の情報漏えい! 芸能人ブログのパスワード流出で芸能人「ショック」と嘆く - ガジェット通信	Security	セキュリティ	これはひどい	Ameba	blog
http://level0.kayac.com/2009/12/to_fresh_flasher_1.php	2010-01-01	563	コンピュータ・IT	新人に読ませたい、Flash制作で必要になってくる大事な考え方(1) | エントリー | _level0.KAYAC	Flash	ActionScript	web制作	webデザイン	あとで読む
http://hatocafe.kantei.go.jp/	2010-01-01	529	政治・経済	鳩cafe	政治	Blog	鳩山由紀夫	ブログ	twitter
http://d.hatena.ne.jp/mirakui/20091230/1262158458	2010-01-01	3189	生活・人生	掃除屋歴7年の俺がしつこい汚れの落し方を教えるよ - 床のトルストイ、ゲイとするとのこと	掃除	生活	お役立ち	まとめ	lifehack
http://www.ideaxidea.com/archives/2009/12/books_matome.html	2010-01-01	970	生活・人生	この本は良いよねぇ、としみじみ思っちゃう本のまとめ - IDEA*IDEA 〜 百式管理人のライフハックブログ	本	book	まとめ	読書	あとで読む
http://www.kajisoku.net/1/archives/eid380.html	2010-01-01	427	おもしろ	⊂⌒⊃。Д。)⊃カジ速≡≡≡⊂⌒つ゚Д゚)つFull Auto | 今年の紅白があまりにも凄まじくカオスすぎる	2ch	ネタ	TV	まとめ	nhk
http://alfalfalfa.com/archives/14620.html	2010-01-01	644	生活・人生	おいお前ら、絶対過保護過干渉で子育てするなよ:アルファルファモザイク	教育	2ch	子育て	育児	生活
http://r.nanapi.jp/1002/	2010-01-01	508	政治・経済	ドル決済専用クレジットカードを作って海外WEBサイトで買い物する方法 | nanapi[ナナピ]	海外	生活	お役立ち	money	Lifehacks
http://mangaen.blog30.fc2.com/blog-entry-660.html	2010-01-01	556	ゲーム・アニメ	マンガがあればいーのだ。  全3誌の「2009マンガランキング」に全て選ばれた、ベスト12作品	マンガ	漫画	まとめ	comic	ランキング
http://d.hatena.ne.jp/heatwave_p2p/20100101/p1	2010-01-01	784	コンピュータ・IT	ダウンロード違法化が施行されたので合法ダウンロードサイトをお勧めするよ - P2Pとかその辺のお話@はてな	webサービス	音楽	著作権	P2P	music

# 全部で12208エントリあった
$ wc -l 2010-01-01-2010-12-31.tsv 
   12208 2010-01-01-2010-12-31.tsv

Mapper

やることは単にソートするだけ.注意点としては,

  • context.writeする際には,IntegerをIntWritableに,StringをTextに.
  • setOutputKeyClassとsetOutputValueClassでクラスを正しく設定する.
public static class Map extends Mapper<LongWritable, Text, IntWritable, Text> {
    public void map(LongWritable key, Text value, Context context)
      throws IOException, InterruptedException {
        String line = value.toString();
        String[] str = line.split("\t");

        Integer users = Integer.parseInt(str[2]);
        String url = str[0];
        String title = str[4];
        context.write(new IntWritable(users), new Text(title + "\t" + url));	    
    }
}

public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    Job job = new Job(conf, "sort");

    job.setOutputKeyClass(IntWritable.class);
    job.setOutputValueClass(Text.class);

    job.setMapperClass(Map.class);

    job.setInputFormatClass(TextInputFormat.class);
    job.setOutputFormatClass(TextOutputFormat.class);

    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));

    job.waitForCompletion(true);
}

実行結果

上記のコードをビルドして,実行.

# Hadoop実行
$ bin/hadoop Main-Class path/to/input path/to/output
....


結果を見てみると,ちゃんとソートされていることが分かります.

$ tail output/part-r-00000
3538	使いやすくなりました! はてなブックマークボタン	http://b.hatena.ne.jp/guide/bbutton
3539	英語コンプの馬鹿でも投資ゼロでTOEIC900に達するたったひとつの方法	http://anond.hatelabo.jp/20090716175613
3561	写真素材 足成【フリーフォト、無料写真素材サイト】	http://www.ashinari.com/
3618	ホームページ制作者が知っておくべき恐ろしく便利な62のサービス+α	http://kanemotilevel.com/add/kizi244.html
3845	ネットで見れるすごい企画書 - NAVER まとめ	http://matome.naver.jp/odai/2128831983939950301
4250	買ってよかったものまとめサイト	http://mono-mono.com/
4390	20歳を過ぎてから英語を学ぼうと決めた人たちへ | The Wisdom of Crowds &#8211; JP	http://wisdomofcrowdsjp.wordpress.com/sitemap/english/
4429	Windows XP(Vista)の起動時の長いディスクアクセスは、Windows Updateの履歴が溜まりすぎていたせいだった?! - 全力HP	http://zenryokuhp.com/blog/archives/2010/11/windows_xpwindo.php
4432	やる気に関する驚きの科学	http://www.aoky.net/articles/daniel_pink/dan_pink_on_motivation.htm
5151	世界史講義録	http://www.geocities.jp/timeway/