2016-03-20 18 views
0

MapReduce Programında Redüktör metodu, Mapper formunda "Words" ve uzunluk olarak bir girdi alıyor.Kelimelerin uzunluklarına göre gruplanması için redüktör kodu

ex.input :- 
     Hi -2 
     how - 3 
     are -3 
     you - 3 
     ? - 1 

Şimdi bunun "Word uzunluğu" gruplayarak bir çıkış yapmasını sağlar ve kelimeler aşağıdaki gibi uzunluk 'kelimesi temelinde bir kategoride altında geldiğini şekilde bir Reducer yazmaya gerek

ex. Output :- 
     1 - [?] 
     2 - [hi] 
     3 - [how, are, you] 

public void map(LongWritable key, Text values, OutputCollector<Text, IntWritable> Output, Reporter arg3) throws IOException { 
    String s = values.toString(); 

    for (String word : s.split(" ")) { 
     if (word.length() > 0) { 
      Output.collect(new Text(word), new IntWritable(word.length())); 
     } 

    } 
} 

Nasıl bir program azaltın edilir: Burada

benim Mapper programı?

+0

Suçlamak gibi bir niyetiniz yoksa, MapReduce'taki gibi bir programı tasarlayamazsanız, belki de geriye dönüp MapReduce temellerini (ör., Bir öğretici veya kitap) okuyun. Çok zaman kazandıracak. – vefthym

cevap

3

Eğer uzunluğuna göre gruplandırmak için redüktör istiyorsanız, mapper olması gerekecek böylece yerine, anahtarları olarak uzunluğu ve değerler olarak kelime yayarlar:

 Hi -2 
    how - 3 
    are -3 
    you - 3 
    ? - 1 

 2 - Hi 
    3 - how 
    3 - are 
    3 - you 
    1 - ? 
yayarlar

Daha sonra, redüktöre önceden girdi olarak hazır sonuca sahipsiniz. Kullandığınız sisteme bağlı olarak, redüktörü tamamen kapatabilir veya basit bir kimlik fonksiyonu kullanabilirsiniz.

+0

Teşekkürler, benim için çalışıyor. Ya, "Aynı kelime + kelimelerin tümü" kelimesinin "Word.length() + toplamı" olarak toplamak istiyorum. ex. Reducer – user3302083

+0

'un Çıktısı olarak "3 - 5 [nasıl, siz, var,]], daha sonra farklı bir harita azaltma sorununuz var. Biri yukarıda tarif edildiği gibidir, diğeri haritacıdan yayılmak (uzunluk, 1) ve (uzunluk, toplam) olarak düşürülür. Başımın tepesinden, bir seferde çözülen bir çözüm düşünemiyorum. – mtj

+0

Bu şeylerin nasıl yapıştığı komik ... Temel olarak, çözüm oldukça basit. Yukarıda açıklandığı gibi eşleştirdiğinizde, sonundaki (sayı, tek kelime) ile (sayı, liste_of_words) ve emit ((sayı, liste_sonu), list_of_words) değerlerini azaltın. – mtj

İlgili konular