如何在C#中使用MapReduce加入2个集合? [英] How to join 2 collections using MapReduce in C#?

查看:111
本文介绍了如何在C#中使用MapReduce加入2个集合?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为了加入两个数据集,我尝试翻译示例通过以下方式C#:

In order to join two datasets I tried to translate this example to C# the following way:

如果您能提出建议修改适当的代码以实现与示例相同的结果,我将非常感激.

I would be very thankful if anyone of you could suggest the appropriate code modification in order to achieve the same result as the example.

推荐答案

该解决方案产生的结果与

The solution which produces the same results as this example is the following:

class Program
{
    static void Main(string[] args)
    {
        var connectionString = "mongodb://localhost";
        var client = new MongoClient(connectionString);
        var server = client.GetServer();
        var database = server.GetDatabase("mr_demo");
        var cLifeExpectancy = database.GetCollection("life_expectancy");
        var cEconomicAssistance = database.GetCollection("us_economic_assistance");

        var options = new MapReduceOptionsBuilder();
        options.SetOutput(MapReduceOutput.Inline);


        options.SetOutput(MapReduceOutput.Reduce("result"));
        var result = cLifeExpectancy.MapReduce(life_expect_map, r, options);
        result = cEconomicAssistance.MapReduce(us_econ_map, r, options);

        foreach (var record in result.GetResults())
        {
            Console.WriteLine(record);
        }
    }

    private static string life_expect_map =
        @"function() {
            // Simply emit the age and 0 for the dollar amount.
            // The dollar amount will come from the other collection.
            emit(this.country, {life_expectancy: this.age, dollars: 0});
        }";

    private static string us_econ_map =
        @"function() {
            // The data set contains grant amounts going back to 1946.  I
            // am only interested in 2009 grants.
            if (this.FY2009 !== undefined && this.FY2009 !== null) {
                emit(this.country_name, {
                    dollars: this.FY2009,
                    life_expectancy: 0
                });
            }
        }";

    private static string r =
        @"function(key, values) {
            var result = {dollars: 0, life_expectancy: 0};

            values.forEach(function(value) {
                // Sum up all the money from all the 2009 grants for this
                // country (key)
                result.dollars += (value.dollars !== null) ? value.dollars : 0;
                // Only set life expectancy once
                if (result.life_expectancy === 0 &&
                value.life_expectancy !== null
                ) {
                    result.life_expectancy = value.life_expectancy;
                }
            });

            return result;
        }";
}

这篇关于如何在C#中使用MapReduce加入2个集合?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆