首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PLINQ在C#中实现MapReduce?

如何使用PLINQ在C#中实现MapReduce?
EN

Stack Overflow用户
提问于 2012-04-12 16:04:39
回答 2查看 2K关注 0票数 7

如何使用PLINQ在C#中实现MapReduce?

假设您有7-8个WebServices来收集数据,并且在每次接收(异步方式)时,您必须将数据放入数据库的某些表中,在我的例子中是SQL Server2008。例如,您从每个Web服务获得的数据是:

代码语言:javascript
复制
 <employees>
  <employee>
   <name>Ramiz</name>
  </employee>
  <employee>
   <name>Aamir</name>
  </employee>
  <employee>
   <name>Zubair</name>
  </employee>
</employees>

而且,每次收到响应时,此数据都会进入一个表名为Employee的表中:

代码语言:javascript
复制
Employee
===
EmployeeID (PK)
EmployeeName

一旦数据进入表中,它就必须以json的形式返回给客户端,即ASP.NET (MVC3)应用程序正在使用客户端JavaScript (ajax)进行此调用。

假设,一个WebServiceEmployee1返回了数据,其他6个在队列中(仍在尝试获取数据)。然后,它应该将结果集注册到表中,而不是等待其他6,并在json中将插入的employee的数据返回给客户端。而且,当其他人也这样做的时候,保持连接并在做。

请看,在我的工具带中有SQLMVC3(剃刀),ASP.NET server2008 R2,jQuery。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2012-05-04 11:30:47

如果不清楚您想要执行的处理过程,我建议您阅读以下MSDN文档:http://bit.ly/Ir7Nvk它使用PLINQ描述了map/reduce,示例如下:

代码语言:javascript
复制
public IDMultisetItemList PotentialFriendsPLinq(SubscriberID id, 
                                           int maxCandidates)
{
  var candidates = 
    subscribers[id].Friends.AsParallel()                    
    .SelectMany(friend => subscribers[friend].Friends)
    .Where(foaf => foaf != id && 
           !(subscribers[id].Friends.Contains(foaf)))
    .GroupBy(foaf => foaf)                               
    .Select(foafGroup => new IDMultisetItem(foafGroup.Key,
                                       foafGroup.Count()));
  return Multiset.MostNumerous(candidates, maxCandidates);
}

"map“是Friends.AsParallelSelectManyWhere,而"reduce”阶段是GroupBySelect

票数 1
EN

Stack Overflow用户

发布于 2012-06-11 22:26:55

此来自MS的PDF在中端有一个Map Reduce示例

http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0CH0QFjAE&url=http%3A%2F%2Fdownload.microsoft.com%2Fdownload%2F3%2F4%2FD%2F34D13993-2132-4E04-AE48-53D3150057BD%2FPatterns_of_Parallel_Programming_CSharp.pdf&ei=4f_VT-ScD-Lg2gWqoeSWDw&usg=AFQjCNGhk_BZL8-5n8DaS_kMTaWRU9Y1Zw&sig2=ddKl4KuOGUiUb1pIawWeNQ

代码语言:javascript
复制
public static IEnumerable<TResult> MapReduce<TSource, TMapped, TKey, TResult>(
this IEnumerable<TSource> source,
Patterns of Parallel Programming Page 76
Func<TSource, IEnumerable<TMapped>> map,
Func<TMapped, TKey> keySelector,
Func<IGrouping<TKey, TMapped>, IEnumerable<TResult>> reduce)
{
return source.SelectMany(map)
.GroupBy(keySelector)
.SelectMany(reduce);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10119736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档