2012-04-11 21 views
13

Czy ktoś może na przykład zmniejszyć obliczenia mediany/kwantyle na mapie?Mediana obliczeniowa na mapie zmniejsza

Moje rozumienie mediany Datafu jest to, że elementy odwzorowujące „n” sortować dane i wysyłać dane do „1” reduktor, który jest odpowiedzialny za sortowanie wszystkie dane z N mappers i znalezienia mediana (wartość środkowa) Czy moje zrozumienie jest poprawne ?,

jeśli tak, czy ta skala podejścia do ogromne ilości danych, jak mogę wyraźnie zobaczyć jeden pojedynczy reduktor walczy, aby wykonać ostatnie zadanie. Dzięki

Odpowiedz

12

Próba znalezienia median (środkowej liczby) w serii wymaga, aby 1 reduktor został przekazany w całym zakresie liczb w celu określenia, która wartość jest "środkowa".

W zależności od zakresu i unikalności wartości w zestawie wejściowym, można wprowadzić kombinator, aby wyprowadzić częstotliwość każdej wartości - zmniejszając liczbę wyjść map wysyłanych do pojedynczego reduktora. Twój reduktor może następnie zużywać pary wartości/częstotliwości sortowania, aby zidentyfikować medianę.

Innym sposobem skalowania (ponownie, jeśli znasz zakres i przybliżoną dystrybucję wartości), jest użycie niestandardowego programu do partycjonowania, który dystrybuuje klucze za pomocą segmentów zakresu (0-99 przejdź do reduktora 0, 100-199 do reduktora) 2 itd.). Będzie to jednak wymagało jakiegoś dodatkowego zadania, aby zbadać wyniki reduktora i wykonać ostateczną medianę obliczeń (znając na przykład liczbę kluczy w każdym reduktorze, można obliczyć, która produkcja reduktora będzie zawierała medianę, i przy której korekcie)

2

O ((n log n)/p), aby go posortować, a następnie O (1), aby uzyskać medianę.

Tak ... można uzyskać O (n/p), ale nie można użyć funkcji sortowania po wyjęciu z pudełka w Hadoop. Chciałbym posortować i zdobyć centralny przedmiot, chyba że można uzasadnić 2-20 godzin czasu programowania, aby zakodować równoległy największy algorytm.

7

Czy naprawdę potrzebujesz dokładną medianę i kwantyle?

Dużo czasu przydaje się uzyskanie przybliżonych wartości i praca z nimi, zwłaszcza jeśli używa się tego na przykład partycjonowanie danych.

W rzeczywistości można użyć przybliżone quantiles przyspieszyć znalezienie dokładnie quantiles (w rzeczywistości w O(n/p) czasie), tutaj jest szorstka Zarys strategii:

  1. Mają mapowania dla każdego partycja obliczyć żądane kwantyle i wyprowadzić je do nowego zestawu danych. Ten zestaw danych powinien być kilkunastokrotnie mniejszy (chyba że poprosisz o zbyt wiele kwantów!). To są twoje wstępne szacunki.
  2. Podziel dane na te kwantyle (lub nawet dodatkowe partycje uzyskane w ten sposób). Celem jest, aby na samym końcu zagwarantować, że prawdziwy kwantyl będzie znajdować się w jednej partycji i że w każdej partycji powinien znajdować się co najwyżej jeden z kwantyli w każdej partycji, wykonać QuickSelect (w O(n)), aby znajdź prawdziwy kwantyl.

Każdy z kroków jest w czasie liniowym. Najbardziej kosztownym krokiem jest część 3, ponieważ będzie wymagać redystrybucji całego zestawu danych, dlatego generuje ruch sieciowy w postaci O(n). Prawdopodobnie można zoptymalizować proces, wybierając kwanty "alternatywne" dla pierwszej iteracji. Powiedz, że chcesz znaleźć globalną medianę. Nie możesz go łatwo znaleźć w liniowym procesie, ale prawdopodobnie możesz zawęzić to do do 1/kth zestawu danych, gdy zostanie podzielony na partycje k. Dlatego też, aby każdy raport węzła miał swoją medianę, każdy węzeł powinien dodatkowo zgłaszać obiekty w punktach (k-1)/(2k) i (k + 1)/(2k). To powinno pozwolić ci zawęzić zakres wartości, w którym prawdziwa mediana musi być autentycznie kłamliwa. Tak więc w następnym kroku każdy węzeł może wysłać obiekty znajdujące się w pożądanym zakresie do pojedynczego węzła głównego i wybrać medianę tylko w tym zakresie.

+0

Znalezienie dokładnych quantiles może być bardzo kosztowne w tym podejściu Amy być lepiej niż naiwnego podejścia choć . Krok 1 do 4 pomaga w dzieleniu zestawu na pół i rozwiązaniu tego samego problemu na mniejszej przestrzeni. Ale w tym podejściu może zająć logn iteracje od kroku 1 do kroku 4, aby faktycznie uzyskać kwantyl. – Sourabh

0

W wielu rzeczywistych scenariuszach liczność wartości w zbiorze danych będzie stosunkowo niewielka. W takich przypadkach, problem może być skutecznie rozwiązany z dwóch miejsc pracy mapreduce:

  1. Obliczanie częstotliwości wartości w zbiorze danych (Word Count pracy, w zasadzie)
  2. Identity odwzorowujący + reduktor, który oblicza medianę podstawie < wartości - częstotliwość> pary

Zadanie 1. znacznie ograniczy ilość danych i może być wykonane w pełni równolegle. Redukcja zadania 2. będzie wymagać przetworzenia tylko elementów n (n = cardinality of your value set) zamiast wszystkich wartości, tak jak w przypadku podejścia naiwnego.

Poniżej przykład reduktora zadania 2. Jest to skrypt Pythona, który może być użyty bezpośrednio w streamingu Hadoop. Przyjmuje wartości w zbiorze są ints, ale może być łatwo przyjęte double s

import sys 

item_to_index_range = [] 
total_count = 0 

# Store in memory a mapping of a value to the range of indexes it has in a sorted list of all values 
for line in sys.stdin: 
    item, count = line.strip().split("\t", 1) 
    new_total_count = total_count + int(count) 
    item_to_index_range.append((item, (total_count + 1, new_total_count + 1))) 
    total_count = new_total_count 

# Calculate index(es) of middle items 
middle_items_indexes = [(total_count/2) + 1] 
if total_count % 2 == 0: 
    middle_items_indexes += [total_count/2] 

# Retrieve middle item(s) 
middle_items = [] 
for i in middle_items_indexes: 
    for item, index_range in item_to_index_range: 
     if i in range(*index_range): 
      middle_items.append(item) 
      continue 

print sum(middle_items)/float(len(middle_items)) 

Ta odpowiedź buduje się na szczycie sugestią początkowo pochodzące z answer z Chris White. Odpowiedź sugeruje użycie sumatora jako środka do obliczania częstotliwości wartości. Jednak w MapReduce nie można zagwarantować, że kombinatory będą zawsze wykonywane. Ma to pewne skutki uboczne:

  • reduktor będzie musiał najpierw obliczyć końcową wartość < - częstotliwość> pary, a następnie obliczyć medianę.
  • W najgorszym scenariuszu, sumatory zostanie nigdy wykonany i reduktor nadal będą musiały walczyć z przetwarzaniem Wszystkie indywidualne wartości