哪些情况可以保证使用“ Map and Reduce ”。算法


是否有此算法的.NET实现?

有帮助吗?

解决方案

Linq等效的Map和Reduce: 如果你有幸拥有linq,那么你不需要编写自己的地图并减少功能。 C#3.5和Linq已经拥有它,虽然名称不同。

Map = Select | Enumerable.Range(1, 10).Select(x => x + 2);
Reduce = Aggregate | Enumerable.Range(1, 10).Aggregate(0, (acc, x) => acc + x);
Filter = Where | Enumerable.Range(1, 10).Where(x => x % 2 == 0);

https://www.justinshield.com/2011/06/mapreduce -in-C /

其他提示

非常适合mapreduce风格解决方案的问题类别是聚合问题。从数据集中提取数据。在C#中,可以利用LINQ以这种方式进行编程。

来自以下文章: http://codecube.net/2009/02/mapreduce-in- C-使用-LINQ /

  

GroupBy方法充当地图,而Select方法则将中间结果减少到最终结果列表中。

var wordOccurrences = words
                .GroupBy(w => w)
                .Select(intermediate => new
                {
                    Word = intermediate.Key,
                    Frequency = intermediate.Sum(w => 1)
                })
                .Where(w => w.Frequency > 10)
                .OrderBy(w => w.Frequency);

对于分发部分,您可以查看DryadLINQ: http:/ /research.microsoft.com/en-us/projects/dryadlinq/default.aspx

因为我永远不记得LINQ将其称为 Where 选择 Aggregate 而不是 Filter ,<代码>地图和 Reduce 所以我创建了一些你可以使用的扩展方法:

IEnumerable<string> myStrings = new List<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,3
int sumOfAllInts = filteredInts.Reduce((sum, i) => sum + i); // Sum up all ints
Assert.Equal(6, sumOfAllInts); // 1+2+3 is 6

以下是3种方法(来自 https://github.com/cs-util-com/cscore/blob/master/CsCore/PlainNetClassLib/src/Plugins/CsCore/com/csutil/collections/IEnumerableExtensions。 cs ):

public static IEnumerable<R> Map<T, R>(this IEnumerable<T> self, Func<T, R> selector) {
    return self.Select(selector);
}

public static T Reduce<T>(this IEnumerable<T> self, Func<T, T, T> func) {
    return self.Aggregate(func);
}

public static IEnumerable<T> Filter<T>(this IEnumerable<T> self, Func<T, bool> predicate) {
    return self.Where(predicate);
}

来自 https://github.com/cs-util的更多详细信息-com / cscore#ienumerable-extensions

如果您正在尝试编写自己的Google版本,那么可能需要它...... !!!

但是说真的,如果你有一个问题,你可以分解成几个小问题,那么Map-Reduce解决方案就可以了。有关 MapReduce 的Google文档有很多很好的例子,包括如何处理数千个网页,计算文件中的文字等等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top