Odpowiedniki Linq Map i Reduce: Jeśli masz szczęście, że masz linq, nie musisz pisać własnej mapy i redukować funkcji. C # 3.5 i Linq mają już to, choć pod różnymi nazwami.
Tłumaczenie jest poprawne, ale pomija kluczowy punkt. Krok tasowania w map redukuje jest krytyczny w map-reduku, ale nie pojawia się w nazwie, więc nie trzeba pisać dla niego żadnego kodu. Jest sterowany wyłącznie przez klucz wyodrębniany w kroku mapy. Odpowiedź Joela Martineza podkreśla, że moim zdaniem lepiej.
Dlaczego oh dlaczego nie po prostu nazwać to Reducezamiast Aggregate... MS po prostu lubi drażnić programistów
John Henckel
13
@JohnHenckel, na pewno nie jestem autorytatywnym źródłem, ale jestem prawie pewien, że pochodzi z SQL. Uważam, że linq został pierwotnie kupiony jako sposób na ułatwienie interakcji z sql w C #. Kiedy nazywasz funkcje w tym świecie, agregacja zaczyna brzmieć bardziej znajomo niż „redukcja” w porównaniu z takimi funkcjami jak Wybierz i Grupuj według. Nie mówię, że to prawda, irytuje mnie to bez końca, ale wyobrażam sobie, że to jest tego powód.
Elliot Blackburn
18
Klasy problemów, które dobrze nadają się do rozwiązania w stylu mapreduce, to problemy agregacji. Wyodrębniania danych ze zbioru danych. W C # można by skorzystać z LINQ do programowania w tym stylu.
Ponieważ nigdy nie mogę zapamiętać, że LINQ to nazywa Where, Selecti Aggregatezamiast Filter, Mapa Reducewięc stworzyłem kilka metod przedłużających można użyć:
IEnumerable<string> myStrings =newList<string>(){"1","2","3","4","5"};IEnumerable<int> convertedToInts = myStrings.Map(s =>int.Parse(s));IEnumerable<int> filteredInts = convertedToInts.Filter(i => i <=3);// Keep 1,2,3int sumOfAllInts = filteredInts.Reduce((sum, i)=> sum + i);// Sum up all intsAssert.Equal(6, sumOfAllInts);// 1+2+3 is 6
Odpowiedzi:
Odpowiedniki Linq Map i Reduce: Jeśli masz szczęście, że masz linq, nie musisz pisać własnej mapy i redukować funkcji. C # 3.5 i Linq mają już to, choć pod różnymi nazwami.
Mapa to
Select
:Zmniejsz to
Aggregate
:Filtr to
Where
:https://www.justinshield.com/2011/06/mapreduce-in-c/
źródło
Reduce
zamiastAggregate
... MS po prostu lubi drażnić programistówKlasy problemów, które dobrze nadają się do rozwiązania w stylu mapreduce, to problemy agregacji. Wyodrębniania danych ze zbioru danych. W C # można by skorzystać z LINQ do programowania w tym stylu.
Z następującego artykułu: http://codecube.net/2009/02/mapreduce-in-c-using-linq/
W przypadku części dystrybuowanej możesz sprawdzić DryadLINQ: http://research.microsoft.com/en-us/projects/dryadlinq/default.aspx
źródło
Ponieważ nigdy nie mogę zapamiętać, że LINQ to nazywa
Where
,Select
iAggregate
zamiastFilter
,Map
aReduce
więc stworzyłem kilka metod przedłużających można użyć:Oto 3 metody (z https://github.com/cs-util-com/cscore/blob/master/CsCore/PlainNetClassLib/src/Plugins/CsCore/com/csutil/collections/IEnumerableExtensions.cs ):
Więcej szczegółów z https://github.com/cs-util-com/cscore#ienumerable-extensions :
źródło