Hadoop'un metinden CustomWritable ayrıştırmak nasıl
#userid; unix-timestamp; value
1; 2010-01-01 00:00:00; 10
2; 2010-01-01 00:00:00; 20
1; 2010-01-01 01:00:00; 11
2; 2010-01-01 01:00:00, 21
1; 2010-01-02 00:00:00; 12
2; 2010-01-02 00:00:00; 22
gibi özel bir sınıf "SessionSummary"
WritableComparable yazma
readFields ve
uygulayan var, metin dosyalarında belirli kullanıcılar için timestamped değerlere sahip Say. Amaç, her takvim günü için kullanıcı başına tüm değerleri toplamaktır.
Böylece eşleyicisi, her bir kullanıcı için çizgiler, haritalar redüktör Kullanıcı başına günde tüm değerleri özetler ve (sekme ayrılmış UTF-8 dizeleri olarak, SessionSummary
arasında toString kullanılarak) TextOutputFormat gibi bir SessionSummary verir: 1; 2010-01-01; 21
2; 2010-01-01; 41
1; 2010-01-02; 12
2; 2010-01-02; 22
İkinci bir Harita/Küçültme aşaması için bu özet girişleri kullanmam gerekirse, üyeleri özetlemek için bu özet verileri nasıl ayrıştırmalıyım? Varolan readFields ve yazma yöntemlerini (WritableComparable arabirim uygulamasının) bir şekilde String DataInput bir şekilde kullanabilir miyim? Bu (besbelli) işe yaramadı: Genel olarak
public void map(...) {
SessionSummary ssw = new SessionSummary();
ssw.readFields(new DataInputStream(new ByteArrayInputStream(value.getBytes("UTF-8"))));
}
: insan tarafından okunabilir bir metin tutarken, Hadoop özel anahtarlar ve değerler uygulamak ve çeşitli M/R aşamalar boyunca onları kolayca yeniden kullanılabilir hale getirmek için en iyi yöntem var mı her aşamada çıktı?
(Hadoop sürümü 0.20.2/CDH3u3)
Teşekkürler Chris! Böylece ikinci MR işi için conf.setInputFormat (SequenceFileInputFormat.class) ayarını yaptım ve Mapper anahtar ve değer sınıfları ilk Reducer'in çıkışındakiyle aynı mı, doğru mu? – thomers
Bu doğru. –
İkinci MR işi için Mapper anahtarını ve değer sınıflarını açık bir şekilde nasıl belirlerim? IdentityMapper ile test ediyorum ve Metin anahtar olarak bekliyor. – thomers