private MethodInfo InitTaskExecute(MapReduceTask task, out object dictMap)
        {
            IDictionary tmpdict;

            task.FindTypesMap(out miMap, out dictMap, out mapper);
            task.FindTypesReduce(out miRed, out tmpdict, out reducer);
            task.ReduceResult = tmpdict;

            MethodInfo miExecuteGeneric = task.GetType().GetMethod("ExecuteMapReduce", BindingFlags.NonPublic | BindingFlags.Instance);

            ParameterInfo[] mapParams = mapper.GetType().GetMethod("Map").GetParameters();
            Type[] collectorParams = mapParams[2].ParameterType.GetGenericArguments();

            ParameterInfo[] reduceParams = reducer.GetType().GetMethod("Reduce").GetParameters();


            MAPKEY = mapParams[0].ParameterType;
            MAPVALUE = mapParams[1].ParameterType;
            REDUCEKEY = collectorParams[0];
            REDUCEVALUE = collectorParams[1];
            REDUCEDNEWVALUE = reduceParams[2].ParameterType;

            MethodInfo miExecute = miExecuteGeneric.MakeGenericMethod(new[] { MAPKEY, MAPVALUE, REDUCEKEY, REDUCEVALUE, REDUCEDNEWVALUE });
            return miExecute;
        }
        public void ExecuteStep(MapReduceTask task, IEnumerable input = null)
        {
            object dictMap;
            MethodInfo miExecute = InitTaskExecute(task, out dictMap);

            task.MapThread = new Thread(new ThreadStart(() => miExecute.Invoke(task, new[] { input, mapper, reducer, dictMap, task.ReduceResult, true, false })));
            task.ReduceThread = new Thread(new ThreadStart(() => miExecute.Invoke(task, new[] { input, mapper, reducer, dictMap, task.ReduceResult, false, true })));


            task.MapThread.Start();
            task.ReduceThread.Start();
        }
        private MethodInfo InitMergeDictionaries(MapReduceTask task)
        {
            MethodInfo miMergeGeneric = task.GetType().GetMethod("MergeDictionaries", BindingFlags.NonPublic | BindingFlags.Instance);

            MethodInfo miExecute = miMergeGeneric.MakeGenericMethod(new[] { REDUCEKEY, REDUCEVALUE, REDUCEDNEWVALUE });
            return miExecute;
        }
        private void MergeDictionaries(MapReduceTask task, IDictionary from)
        {
            if (task == null || from == null)
                return;

            MethodInfo miMerge = InitMergeDictionaries(task);

            miMerge.Invoke(task, new object[] { reducer, from });
        }
Beispiel #5
0
 public virtual void ExecuteMapReduceTask(MapReduceTask task, string taskId, MROutputOption option,
                                          short callbackId, IKeyFilter keyfilter, string query, Hashtable parameters)
 {
 }
Beispiel #6
0
 /// <summary>
 /// Initialize an instance of the class.
 /// </summary>
 /// <param name="valueExtractor">instance of IValueExtractor</param>
 /// <param name="aggregator">instance ofIAggregator</param>
 public AggregatorTask(IValueExtractor valueExtractor, IAggregator aggregator)
 {
     _aggregatorTask = new MapReduceTask();
     _extractor      = valueExtractor;
     _aggregator     = aggregator;
 }