/// <summary>Combines values for a given key.</summary> /// <param name="key"> /// the key is expected to be a Text object, whose prefix indicates /// the type of aggregation to aggregate the values. /// </param> /// <param name="values">the values to combine</param> /// <param name="context">to collect combined values</param> /// <exception cref="System.IO.IOException"/> /// <exception cref="System.Exception"/> protected internal override void Reduce(Text key, IEnumerable <Text> values, Reducer.Context context) { string keyStr = key.ToString(); int pos = keyStr.IndexOf(ValueAggregatorDescriptor.TypeSeparator); string type = Sharpen.Runtime.Substring(keyStr, 0, pos); long uniqCount = context.GetConfiguration().GetLong(UniqValueCount.MaxNumUniqueValues , long.MaxValue); ValueAggregator aggregator = ValueAggregatorBaseDescriptor.GenerateValueAggregator (type, uniqCount); foreach (Text val in values) { aggregator.AddNextValue(val); } IEnumerator <object> outputs = aggregator.GetCombinerOutput().GetEnumerator(); while (outputs.HasNext()) { object v = outputs.Next(); if (v is Text) { context.Write(key, (Text)v); } else { context.Write(key, new Text(v.ToString())); } } }
/// <summary>Combines values for a given key.</summary> /// <param name="key"> /// the key is expected to be a Text object, whose prefix indicates /// the type of aggregation to aggregate the values. /// </param> /// <param name="values">the values to combine</param> /// <param name="output">to collect combined values</param> /// <exception cref="System.IO.IOException"/> public override void Reduce(Text key, IEnumerator <Text> values, OutputCollector <Text , Text> output, Reporter reporter) { string keyStr = key.ToString(); int pos = keyStr.IndexOf(ValueAggregatorDescriptor.TypeSeparator); string type = Sharpen.Runtime.Substring(keyStr, 0, pos); ValueAggregator aggregator = ValueAggregatorBaseDescriptor.GenerateValueAggregator (type); while (values.HasNext()) { aggregator.AddNextValue(values.Next()); } IEnumerator outputs = aggregator.GetCombinerOutput().GetEnumerator(); while (outputs.HasNext()) { object v = outputs.Next(); if (v is Text) { output.Collect(key, (Text)v); } else { output.Collect(key, new Text(v.ToString())); } } }
/// <param name="type">the aggregation type</param> /// <returns>a value aggregator of the given type.</returns> public static ValueAggregator GenerateValueAggregator(string type) { ValueAggregator retv = null; if (type.CompareToIgnoreCase(LongValueSum) == 0) { retv = new LongValueSum(); } if (type.CompareToIgnoreCase(LongValueMax) == 0) { retv = new LongValueMax(); } else { if (type.CompareToIgnoreCase(LongValueMin) == 0) { retv = new LongValueMin(); } else { if (type.CompareToIgnoreCase(StringValueMax) == 0) { retv = new StringValueMax(); } else { if (type.CompareToIgnoreCase(StringValueMin) == 0) { retv = new StringValueMin(); } else { if (type.CompareToIgnoreCase(DoubleValueSum) == 0) { retv = new DoubleValueSum(); } else { if (type.CompareToIgnoreCase(UniqValueCount) == 0) { retv = new UniqValueCount(maxNumItems); } else { if (type.CompareToIgnoreCase(ValueHistogram) == 0) { retv = new ValueHistogram(); } } } } } } } return(retv); }
private Range <IComparable> GetSizeDataRange() { IEnumerable <object> sizeValues = this.GetSizeValues((IEnumerable <DataPoint>) this.DataPointsByXValue); DataValueType valueType = this.ActualSizeValueType; if (valueType == DataValueType.Auto) { valueType = ValueHelper.GetDataValueType(sizeValues); } return(ValueAggregator.GetAggregator(valueType).GetRange(sizeValues)); }
/// <param name="key"> /// the key is expected to be a Text object, whose prefix indicates /// the type of aggregation to aggregate the values. In effect, data /// driven computing is achieved. It is assumed that each aggregator's /// getReport method emits appropriate output for the aggregator. This /// may be further customiized. /// </param> /// <param name="values">the values to be aggregated</param> /// <exception cref="System.IO.IOException"/> public override void Reduce(Text key, IEnumerator <Text> values, OutputCollector <Text , Text> output, Reporter reporter) { string keyStr = key.ToString(); int pos = keyStr.IndexOf(ValueAggregatorDescriptor.TypeSeparator); string type = Sharpen.Runtime.Substring(keyStr, 0, pos); keyStr = Sharpen.Runtime.Substring(keyStr, pos + ValueAggregatorDescriptor.TypeSeparator .Length); ValueAggregator aggregator = ValueAggregatorBaseDescriptor.GenerateValueAggregator (type); while (values.HasNext()) { aggregator.AddNextValue(values.Next()); } string val = aggregator.GetReport(); key = new Text(keyStr); output.Collect(key, new Text(val)); }
/// <param name="key"> /// the key is expected to be a Text object, whose prefix indicates /// the type of aggregation to aggregate the values. In effect, data /// driven computing is achieved. It is assumed that each aggregator's /// getReport method emits appropriate output for the aggregator. This /// may be further customized. /// </param> /// <param name="values">the values to be aggregated</param> /// <param name="context"></param> /// <exception cref="System.IO.IOException"/> /// <exception cref="System.Exception"/> protected internal override void Reduce(Text key, IEnumerable <Text> values, Reducer.Context context) { string keyStr = key.ToString(); int pos = keyStr.IndexOf(ValueAggregatorDescriptor.TypeSeparator); string type = Sharpen.Runtime.Substring(keyStr, 0, pos); keyStr = Sharpen.Runtime.Substring(keyStr, pos + ValueAggregatorDescriptor.TypeSeparator .Length); long uniqCount = context.GetConfiguration().GetLong(UniqValueCount.MaxNumUniqueValues , long.MaxValue); ValueAggregator aggregator = ValueAggregatorBaseDescriptor.GenerateValueAggregator (type, uniqCount); foreach (Text value in values) { aggregator.AddNextValue(value); } string val = aggregator.GetReport(); key = new Text(keyStr); context.Write(key, new Text(val)); }
internal virtual ValueAggregator CreateAggregator(DataValueType valueType) { return(ValueAggregator.GetAggregator(valueType)); }