2016-04-05 17 views
0

A.txt ve B.txt adlı iki farklı dosyam var.Anahtar ve değer iki eşleştiriciden bir redüktöre nasıl kullanılır?

A.txt:     B.txt 
id name des   id name 
1 one  0   1 apple 
2 two  1   2 pine 
3 three 0   3 orange 

Her iki dosyada da aynı alana "id" sahibim. İki mapper sınıfı kullandım. A.txt ve diğeri B.txt için. Bir redüktör sınıfı vardır.

In MapperA.class "des" is checked and if "0" then its id is sent as key and value as name. 
In MapperB.class id and name is sent as key and value. 
Now, in reducer I need to determine the "id" from MapperA and check with "id" from MapperB and if present, then send key as "id" and value as "name". 
How can we compare the key and value from two mapper in a reducer to get desired result? 

redüktör istenilen çıkışı:

id  name 
1  apple 
3  orange 

cevap

0

işlevi azaltmak karşılaştırma işlemini gerekmez. her giriş a.txt ve B.txt a.txt İÇİN

MAPPER if (des == 0) sonra yazma kimliği, değeri için 2 ayrı mapper dersi verilecektir -> des>/> elma veya portakal veya çam ...>

-/des TextWritable ("0") başka

id, değer B.txt için her şeyi

mapper yazmayın olacak

Redüktör

giriş < 1, {0, elma}> < 2, {çam}> < 3, {0, portakal}>

sonra düşürülmesine işlem

Boolean shouldBeWritten=false; 
foreach value 
{ 
    char firstLetter = first char of value; 
    if(firstletter == 0) 
    shouldBeWritten=true; 
} 
if(shouldBeWritten) 
write(key, value); 
olacak

Bu uygulamada, verimli olmayan ilk meyve harfini almanız gerekmektedir, ancak ilk eşleştirmede gereksiz çiftleri göndermeniz gerekmeyecektir.

Bu sadece bir örnektir karar size kalmış.

Bu karar, a.txt ve b.txt boyutlarına da bağlıdır.

+0

"des" değerini karşılaştırarak ve bu kimliği redüktöre geçirerek "id" değerini belirlemem gerekiyor. – bthapa

İlgili konular