文档

使用MapReduce计算意思组

这个例子展示了如何计算意思组在一个数据集使用mapreduce。它演示了如何计算子组的数据。

准备数据

创建一个数据存储使用airlinesmall.csv数据集。这个12-megabyte数据集包含29列几个航空公司的航班信息,包括到达和离开的时间。在本例中,选择DayOfWeekArrDelay(航班延误)感兴趣的变量。

ds =数据存储(“airlinesmall.csv”,“TreatAsMissing”,“NA”);ds。SelectedVariableNames = {“ArrDelay”,“DayOfWeek”};

数据存储处理“NA”值作为失踪,代替缺失值默认值。此外,SelectedVariableNames属性允许您工作感兴趣的只有选定的变量,你可以验证使用预览

预览(ds)
ans = 8 x2表ArrDelay DayOfWeek ________ _____ 8 3 8 1 21 5 13 5 4 4 59 3 3 4 11 6

MapReduce运行

mapreduce函数需要一个映射函数reduce函数作为输入。映射器接收到的大量数据和中间结果输出。减速机读取中间结果并产生一个最终的结果。

在这个例子中,映射器计算延误的数量和金额的日子在每个块的数据,然后将结果存储为中间键值对。钥匙是整数(1 - 7)代表一周的日子和双元素值向量代表数和每一天的延迟。

显示文件的映射函数。

函数meanArrivalDelayByDayMapper(数据、~ intermKVStore)% MeanByGroupMapReduceExample映射函数。% 2014年版权MathWorks公司。% n除以2表数据:第一列是DayOfWeek第二%是ArrDelay。删除缺失值。延迟= data.ArrDelay;一天= data.DayOfWeek;notNaN = ~ isnan(延迟);天= (notNaN);延迟=延迟(notNaN);在这一块%找到独特的天[intermKeys ~, idx] =独特(天,“稳定”);%组延迟通过idx和@grpstatsfun函数应用到每个组intermVals = accumarray (idx、延迟、大小(intermKeys) @countsum);addmulti (intermKVStore intermKeys intermVals);函数= countsum (x) n =长度(x);%数s = (x)总和;%的意思= {(n, s)};

在映射阶段之后,mapreduce唯一键的中间键值(在本例中,星期)。因此,每个调用减速器工作价值观与一天的星期。减速机接收到的列表的中间数和金额输入键(指定的延迟一天intermKey),总结了值总数,n和总金额年代。然后,减速器计算总的意思是,并将最后一个键-值对添加到输出。这个键-值对代表平均飞行到达延迟一天。

reduce函数文件显示。

函数meanArrivalDelayByDayReducer (intermKey intermValIter outKVStore)% MeanByGroupMapReduceExample减速功能。% 2014年版权MathWorks公司。n = 0;s = 0;%得到所有的中间结果集hasnext (intermValIter) intermValue = getnext (intermValIter);n = n + intermValue (1);s = s + intermValue (2);结束%积累总和和计数意味着= s / n;%将结果添加到输出数据存储添加(intermKey, outKVStore意味着);

使用mapreducemap和reduce函数应用于数据存储,ds

@meanArrivalDelayByDayMapper meanDelayByDay = mapreduce (ds,@meanArrivalDelayByDayReducer);
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MAPREDUCE进展* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *地图地图16%减少0% 32% 0%减少0%减少0%地图48%减少0% 65% 0% 81%减少0%地图地图地图100%减少0% 100% 97%减少0%减少14%地图100%减少29% 100% 43% 100%减少57%地图地图地图100%减少86% 100% 100%减少71%减少100%

mapreduce返回一个数据存储,meanDelayByDay在当前文件夹,文件。

从输出数据存储,读取最终结果meanDelayByDay

结果= readall (meanDelayByDay)
结果= 7 x2表键值___ ________ 3 [7.0038]1 [7.0833]5 [9.4193]4 [9.3185]6 [4.2095]2 [5.8569]7 [6.5241]

组织的结果

整数键(1 - 7)代表一周的日子。组织更多的结果,把钥匙分类数组,从单一检索数值元素的细胞,和重命名的变量名称生成的表。

结果。关键=分类(结果。1:7,关键{“我的”,“星期二”,“结婚”,“星期四”,“星期五”,“坐”,“太阳”});结果。值= cell2mat (result.Value);result.Properties。VariableNames = {“DayOfWeek”,“MeanArrDelay”}
结果= 7 x2表DayOfWeek MeanArrDelay _____ _______结婚7.0038星期一7.0833 6.5241 5.8569 9.4193 9.3185坐4.2095星期二星期四星期五太阳

对行排序表的意思是航班延误。这表明,每周的周六是最好的天旅行,而周五是最糟糕的。

结果= sortrows(结果,“MeanArrDelay”)
结果= 7 x2表DayOfWeek MeanArrDelay _____ _______坐4.2095星期二5.8569太阳6.5241 9.4193 9.3185 7.0038星期一7.0833星期四星期五结婚

另请参阅

|

相关的话题

这个主题有帮助吗?