SORU
26 AĞUSTOS 2008, Salı


MapReduce basitçe açıklayın lütfen

Benim ile ilgili CouchDB soru.

Herkes MapReduce bir mum anlayamadım açıklayabilir mi?

CEVAP
27 AĞUSTOS 2008, ÇARŞAMBA


Harita ile ilgili temel bilgiler için tüm yol aşağı gidiyor ve Azaltmak.


Göster"dönüşümler" öğesi başka tür bir liste filan öğeleri ve liste aynı tür. geri koymak sağlayan bir işlevdir

ben numaralarının bir listesi var varsayalım: [1,2,3] ve her sayı çift, bu durumda, işlev istiyorum "her çift sayı" fonksiyon x = x * 2. Ve eşleşmeler olmadan, basit bir döngü yazabilirim, söyle

A = [1, 2, 3]
foreach (item in A) A[item] = A[item] * 2

ve = ederdim [2, 4, 6] ama eğer bir harita işlevi varsa döngüler yazmak yerine, yazabilirim

A = [1, 2, 3].Map(x => x * 2)

x =>x * 2 [1,2,3] unsurlara karşı yürütülecek bir fonksiyonudur. Ne programı her madde, idam alır (x =>x her ürüne eşit olur ve sonuç üreten bir liste yaparak ona karşı x * 2).

1 : 1 => 1 * 2 : 2  
2 : 2 => 2 * 2 : 4  
3 : 3 => 3 * 2 : 6  

harita fonksiyonu yürütme (x =>sonra 2 * x) olurdu [2, 4, 6].


Azaltmakhangi işlevi "" listelerde öğeleri ve bazı hesaplamalar gerçekleştirin . toplartümonları, tek bir değeri azaltmak böylece.

Bir miktar bulma ya da ortalamalar buluyorlar bir tüm örneklerini fonksiyonunu azaltır. Eğer numaraları listesi varsa gibi, [7, 8, 9] ve onları toplanır istiyorum, böyle bir döngü yazmak istiyorum

A = [7, 8, 9]
sum = 0
foreach (item in A) sum = sum   A[item]

Ama, eğer bir fonksiyonu azaltmak için erişimi varsa, bu gibi yazabilirsiniz

A = [7, 8, 9]
sum = A.reduce( 0, (x, y) => x   y )

Şimdi 2 argüman (ve x fonksiyonu 0 ve y) geçirilir yüzden biraz kafa karıştırıcı. Azaltmak için bir işlev için yararlı olmalı giyinemeyecek 2 öğeleri hesaplamak bir şey ve "azaltmak" bu 2 Ürün için sadece tek bir değer, böylece program olabilir azaltmak her çift kadar var bir tek değer.

yürütme ki şöyle:

result = 0
7 : result = result   7 = 0   7 = 7
8 : result = result   8 = 7   8 = 15
9 : result = result   9 = 15   9 = 24

Ama sıfır her zaman başlamak istemiyorum, ilk bağımsız değişken başlangıç değeri özellikle belirtmek result = ilk satırdaki değeri izin yok.

istediğini söyle toplamı 2 listeler, bu gibi görünebilir:

A = [7, 8, 9]
B = [1, 2, 3]
sum = 0
sum = A.reduce( sum, (x, y) => x   y )
sum = B.reduce( sum, (x, y) => x   y )

ya da gerçek dünyada bulmak daha olası diye bir versiyonu:

A = [7, 8, 9]
B = [1, 2, 3]

sum_func = (x, y) => x   y
sum = A.reduce( B.reduce( 0, sum_func ), sum_func )

Onun iyi bir şey, bir DB çünkü yazılım ile Harita\Azaltmaya destek olabilir iş ile veritabanı gerekmeden bilmek veriler nasıl saklanır bir DB kullanmak için, bu yüzden bir DB engine.

Senin ihtiyacın yapabilmek için "söyle" motoru ne istiyorsun tarafından temin onlarla da bir Harita veya Azaltmak fonksiyon ve DB motoru-ebil bulmak onun yol verileri, geçerli işlev, ve gelmek ile sonuçları istediğiniz tüm olmadan seni tanımak ne kadar bu döngü tekrar tüm kayıtları.

Orada dizinler ve anahtarlar ve katılır ve görüş ve bir çok malzeme tek bir veritabanı olabilir tutun, böylece koruyucu size karşı nasıl veridir aslında saklı, kodunuzu yapılır kolay yazmak ve korumak.

Aynısı paralel programlama, eğer sadece belirtmek ne yapmak istiyorsun verileri yerine aslında uygulama döngü kod, temel altyapı "parallelize" ve yürütme işlevinde eşzamanlı paralel bir döngü için.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MotoManTV

    MotoManTV

    10 Aralık 2009
  • Muse

    Muse

    28 EYLÜL 2006
  • waterfairy17

    waterfairy17

    9 Aralık 2007