C#版的MapReduce

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace mapReduce
{
    public static class helper
    {
        public static Dictionary<TKey, TResult> MapReduce<TInput, TKey, TValue, TResult>(
           this IEnumerable<TInput> list,
           //Func<TInput, IEnumerable<KeyValuePair<TKey, TValue>>> map,
                   Func<TInput, KeyValuePair<TKey, TValue>> map,
           Func<TKey, IEnumerable<TValue>, TResult> reduce)
        {
            Dictionary<TKey, List<TValue>> mapResult = new Dictionary<TKey, List<TValue>>();
            foreach (var item in list)
            {
                //foreach (var one in map(item))
                //{
                var one = map(item);
                if (Convert.ToInt32( one.Key) == 0)
                {
                    continue;
                }
                    List<TValue> mapValues;
                    if (!mapResult.TryGetValue(one.Key, out mapValues))
                    {
                        mapValues = new List<TValue>();
                        mapResult.Add(one.Key, mapValues);
                    }
                    mapValues.Add(one.Value);
                //}
            }
            var result = new Dictionary<TKey, TResult>();
            foreach (var m in mapResult)
            {
                result.Add(m.Key, reduce(m.Key, m.Value));
            }
            return result;
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace mapReduce
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Person> list = new List<Person>();
            list.Add(new Person { ID = 1, Name = "肖银龙", Age = 23 });
            list.Add(new Person { ID = 2, Name = "郭彦磊", Age = 24 });
            list.Add(new Person { ID = 3, Name = "王老师", Age = 23 });
            list.Add(new Person { ID = 4, Name = "路人甲", Age = 25 });
            list.Add(new Person { ID = 5, Name = "路人乙", Age = 20 });

            var result = list.MapReduce<Person, int, string, string>(Map,
                (key, values) => string.Join(",", values));

            foreach (var d in result)
            {
                Console.WriteLine(d.Key + ":" + d.Value);
            }

            Console.Read();
        }

        //public static IEnumerable<KeyValuePair<int, string>> Map(Person p)
        //{
        //    if (p.Age > 22)
        //        yield return new KeyValuePair<int, string>(p.Age, p.Name);

        //}

        public static KeyValuePair<int, string> Map(Person p)
        {
            if (p.Age > 22)
                return new KeyValuePair<int, string>(p.Age, p.Name);
            else
                return new KeyValuePair<int, string>(0,null);

        }

    }

    public class Person
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

C#版的MapReduce

时间: 2024-12-06 04:30:54

C#版的MapReduce的相关文章

Hadoop,MapReduce操作Mysql

前以前帖子介绍,怎样读取文本数据源和多个数据源的合并:http://www.cnblogs.com/liqizhou/archive/2012/05/15/2501835.html 这一个博客介绍一下MapReduce怎样读取关系数据库的数据,选择的关系数据库为MySql,因为它是开源的软件,所以大家用的比较多.以前上学的时候就没有用过开源的软件,直接用盗版,也相当与免费,且比开源好用,例如向oracle,windows7等等.现在工作了,由于公司考虑成本的问题,所以都用成开源的,ubuntu,

转:最近5年133个Java面试问题列表

最近5年133个Java面试问题列表 Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入. 在我初入职场的时候,类似于 Vector 与 Array 的区别.HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在.如今,你将会被问到许多 Java 程序员都没有看过的领域,如 NIO,

面试题_125_to_133_Java 面试中其他各式各样的问题

这部分包含 Java 中关于 XML 的面试题,JDBC 面试题,正则表达式面试题,Java 错误和异常及序列化面试题 125)嵌套静态类与顶级类有什么区别?(答案)一个公共的顶级类的源文件名称与类名相同,而嵌套静态类没有这个要求.一个嵌套类位于顶级类内部,需要使用顶级类的名称来引用嵌套静态类,如 HashMap.Entry 是一个嵌套静态类,HashMap 是一个顶级类,Entry是一个嵌套静态类. 126)你能写出一个正则表达式来判断一个字符串是否是一个数字吗?(解决方案)一个数字字符串,只

Java面试宝典

http://www.cnblogs.com/bluestorm/p/6429894.html Java面试宝典 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用).主要有以下优点: 可替换性:多态对已存在代码具有可替换性. 可扩充性:增加新的子类不影响已经存在的类结构. 接口性:多态是超累通过方法签名,想子类提供一个公共接口,由子类来完善或

NoSQL世界的几个重要理论

和所有事物一样,NoSQL的兴起也是由许多理论支撑作为前提的,正是由下面一些理论的支撑,NoSQL的方向才能如此明朗. 1.CAP理论 CAP理论无疑是导致技术趋势由关系数据库系统向NoSQL系统转变的最重要原因. CAP(Consistency,Availability,Patition tolerance)理论论述的是在任何分布式系统中,只可能满足一致性,可用性及分区容忍性三者中的两者,不可能全部都满足.所以不用花时间精力在如何满足所有三者上面. 原理的证明简单的说就是,在保证分区容忍性的情

Java笔试题解答和部分面试题

面试类  银行类的问题 问题一:在多线程环境中使用HashMap会有什么问题?在什么情况下使用get()方法会产生无限循环? HashMap本身没有什么问题,有没有问题取决于你是如何使用它的.比如,你在一个线程里初始化了一个HashMap然后在多个其他线程里对其进行读取,这肯定没有任何问题.有个例子就是使用HashMap来存储系统配置项.当有多于一个线程对HashMap进行修改操作的时候才会真正产生问题,比如增加.删除.更新键值对的时候.因为put()操作可以造成重新分配存储大小(re-size

《写给大忙人的Hadoop 》读书笔记(二)Hadoop介绍

本文从Hadoop是什么.能做什么.谁使用三个主要问题去讲解.对于重点知识如MapReduce.YARN.Hadoop生态系统内的其他组件(HBase.Pig.Hive.Zookeeper等)的介绍和使用这里不做详细说明,需要大家对这些内容扩展并深入学习. 1.Hadoop是什么及功能 1.2002年,Hadoop作为一个支持Web搜索引擎的单独软件项目被创立,如今已成为一个用来分析大量不同类型数据的工具和应用程序(如HBase,Hive等)的生态系统. Hadoop数据处理的一些功能如下: 1

在hadoop-2.2.0集群上使用TotalOrderPartitioner进行排序时遇到的新旧接口问题

最近我所在的一个项目进行了Hadoop版本迁移,由hadoop-0.20.2迁移至hadoop-2.2.0,旧版的mapreduce Job虽然都是用旧的API写的,但在新环境下基本上都是兼容的,只有两个涉及到global sort的Job,出现了同样的问题,报错分别如下: 1.wrong key class: org.apache.hadoop.io.LongWritable is not class com.cmri.bcpdm.v2.filters.sort.NewText at org.

谈谈ODPS商业化(四):2014阿里巴巴大数据竞赛

几天前2014阿里巴巴大数据竞赛刚刚落下帷幕,第11名的F1分数.准确率和召回率是6.10%.6.28%和5.93%.前10名的成绩还未公布,他们会被邀请到阿里巴巴公司来,有机会和内部团队一起参与双11.选手们闲下来,开始在群里爆特征.开玩笑.交换联系方式. 这次海内外共有7276支队报名.比赛分为多个阶段:S1是线下海选,从S2开始上ODPS,每月底淘汰末位的100支队,直到7月31日尘埃落定.选手们需要像阿里数据分析师一样工作,完全依赖云端的ODPS平台上的SQL.Mapreduce和Xli