ただ、まあ普通にカウントするだけでは面白く無いので、
@fumokmmさんの『今日から始めるGPars』を参考にして、
並列処理でやってみました。
以下、ソースコード
def count(arg){
withPool{
arg.parallel
.map{[it, 1]}
.groupBy{it[0]}.getParallel()
.map{it.value=it.value.size();it}
.sort{-it.value}
.collection
}
}
count(words.replaceAll("-\n", "").replaceAll(/[..:.,]/,"").split(/[\s:]/)).each{
println it
}
実際のカウントの部分の
replaceAll(String, String)
は対象となる文章(GoogleのMapReduce論文)に合わせて、適宜文字の調整をするために行っています。で、これの結果の上位の文字は次のとおりです。
the=484
of=312
a=213
to=197
and=170
is=122
The=104
in=97
MapReduce=87
for=85
that=79
)=76
data=72
reduce=68
(=63
by=60
map=59
on=58
output=58
are=56
function=49
tasks=48
task=48
machines=45
as=41
input=40
it=40
from=38
this=34
computation=33
小文字、大文字の変換をやっていないので、ちょっと微妙ですかね。
また、カッコの数も違っているので、なんか微妙です。
ちなみに、実行速度は以下の条件で、
Intel Xeon 3460
RAM 8.00GB
Groovy 1.8.0
Java 1.6.0-24
約1s程度でした。
0 件のコメント:
コメントを投稿