public Task <List <KeyValuePair <string, WaveDataAverage> > > Reduce(string key, List <KeyValuePair <string, List <WaveData> > > values) { var result = new List <KeyValuePair <string, WaveDataAverage> >(); var flatternList = values.SelectMany(x => x.Value).ToList(); var siteGroups = flatternList.GroupBy(x => x.Site, y => y); foreach (var siteGroup in siteGroups) { //var totalSeconds = siteGroup.Sum(x => x.Seconds); var totalHsig = siteGroup.Sum(x => x.Hsig); var totalHmax = siteGroup.Sum(x => x.Hmax); var totalTp = siteGroup.Sum(x => x.Tp); var totalTz = siteGroup.Sum(x => x.Tz); var totalSst = siteGroup.Sum(x => x.Sst); var totalDirection = siteGroup.Sum(x => x.Direction); var count = siteGroup.Count(); var avg = new WaveDataAverage { Site = key, //Seconds = totalSeconds / count, Hisg = totalHsig / count, Hmax = totalHmax / count, Tp = totalTp / count, Tz = totalTz / count, Sst = totalSst / count, Direction = totalDirection / count }; result.Add(new KeyValuePair <string, WaveDataAverage>(siteGroup.Key, avg)); } return(Task.FromResult(result)); }
public Task <List <KeyValuePair <string, WaveDataAverage> > > WaveDataWithoutUsingMapReduce() { var result = new List <KeyValuePair <string, WaveDataAverage> >(); var siteGroups = _waveDatas.GroupBy(x => x.Site, y => y); foreach (var siteGroup in siteGroups) { //var totalSeconds = siteGroup.Sum(x => x.Seconds); var totalHsig = siteGroup.Sum(x => x.Hsig); var totalHmax = siteGroup.Sum(x => x.Hmax); var totalTp = siteGroup.Sum(x => x.Tp); var totalTz = siteGroup.Sum(x => x.Tz); var totalSst = siteGroup.Sum(x => x.Sst); var totalDirection = siteGroup.Sum(x => x.Direction); var count = siteGroup.Count(); var avg = new WaveDataAverage { Site = siteGroup.Key, //Seconds = totalSeconds / count, Hisg = totalHsig / count, Hmax = totalHmax / count, Tp = totalTp / count, Tz = totalTz / count, Sst = totalSst / count, Direction = totalDirection / count }; result.Add(new KeyValuePair <string, WaveDataAverage>(siteGroup.Key, avg)); } return(Task.FromResult(result)); }