主要内容

mapreduce

用于分析内存中不能容纳的数据集的编程技术

描述

例子

outds= mapreduce (dsmapfunreducefun应用映射函数mapfun输入数据存储ds,然后将与每个唯一键关联的值传递给reduce函数reducefun.输出数据存储是KeyValueDatastore对象,指向.mat当前文件夹中的文件。

outds= mapreduce (dsmapfunreducefun先生可选地指定为的运行时配置Settingsmapreduce.的先生对象的调用的结果mapreduce函数。通常,该参数与并行计算工具箱™一起使用,MATLAB®并行服务器™,或MATLAB编译器™.有关详细信息,请参见使用其他产品加速和部署MapReduce下载188bet金宝搏

outds= mapreduce (___名称,值指定一个或多个附加选项名称,值使用前面的任何语法对参数。例如,您可以指定“OutputFolder”后跟一个指定输出文件夹路径的字符向量。

例子

全部折叠

使用mapreduce在一个数据集中计算每个航空公司的航班数量。

创建一个数据存储airlinesmall.csv数据集。这个12兆字节的数据集包含了一些航空公司的29列航班信息,包括到达和起飞时间。本例中,选择UniqueCarrier(航空公司名称)作为感兴趣的变量。指定“TreatAsMissing”名称-值对,以便数据存储处理“NA”值,并指定“MissingValue”名称-值对,将缺失的值替换为零。

ds = tabularTextDatastore (“airlinesmall.csv”“TreatAsMissing”“NA”...“MissingValue”, 0);ds。SelectedVariableNames =“UniqueCarrier”;ds。SelectedFormats =“% C”

预览数据。

预览(ds)
ans =8×1表唯一运营商_____________ PS PS PS PS PS PS PS PS PS PS PS PS PS PS PS

运行mapreduce上的数据。map和reduce函数计算每个数据块中每个航空公司名称的实例数,然后将这些中间计数合并为最终计数。该方法利用由mapreduce.的函数countMappercountReducer包含在此脚本的末尾。

outds = mapreduce(ds, @countMapper, @countReducer);
******************************** * MAPREDUCE的进展  * ******************************** 地图地图16%减少0% 32% 0%减少0%减少0%地图48%减少0% 65%减少0%地图地图97%减少0% 100% 81%减少0%减少0%地图100%减少10% 100%减少21%地图100%减少31% 100%减少41%地图100%减少52%减少100%62%地图100%减少72%地图100%减少83%地图100%减少93%地图100%减少100%
readall (outds)
ans =29日×2表键值  __________ _________ {' AA’}{[14930]}{”“}{[2910]}{‘公司’}{[8138]}{“DL”}{[16578]}{' EA}{[920]}{“惠普”}{[3660]}{毫升(1)的}{[69]}{“西北”}{[10349]}{的PA(1)}{[318]}{“π”}{[871]}{“PS”}{[83]}{TW的}{[3805]}{UA的}{[13286]}{‘我们’}{[13997]}{的WN} {[15931]} {AQ的}{[154]}⋮

map函数countMapper利用数据是分类的这一事实。的countcats类别在输入数据的每个块上使用函数来生成航空公司名称和相关计数的键/值对。

函数countMapper(数据、信息、intermKV)%计算每个区块中唯一的航空公司名称。一个= data.UniqueCarrier;c = num2cell (countcats (a));键=类别(a);addmulti (intermKV、钥匙、c)结束

reduce函数countReducer读取地图函数产生的中间数据,并将所有计数相加,生成每个航空公司的单个最终计数。

函数countReducer (intermValIter,关键outKV)组合所有块的计数,以产生最终计数。数= 0;hasnext(intermValIter) data = getnext(intermValIter);Count = Count +数据;结束添加(outKV,钥匙,计数)结束

输入参数

全部折叠

输入数据存储,指定为一个数据存储对象。使用数据存储函数从数据集中创建一个数据存储对象。

mapreduce只适用于确定性的数据存储。也就是说,如果你使用在数据存储上,重置数据存储重置,然后再次读取数据存储,那么在这两种情况下返回的数据必须相同。mapreduce涉及非确定性数据存储的计算可能产生不可预测的结果。看到为文件格式或应用程序选择数据存储为更多的信息。

映射函数的函数句柄。mapfun从输入数据存储接收块ds,然后使用添加addmulti向中间添加键值对的函数KeyValueStore对象。通过调用map函数的次数mapreduce是否等于数据存储(块的数量由ReadSize属性)。

映射函数的输入是数据信息,intermKVStore,这mapreduce自动创建并传递给映射函数:

  • 数据信息对象的调用的结果的函数数据存储,这mapreduce在每次调用map函数之前自动执行。

  • intermKVStore是中间产物的名字吗KeyValueStore对象,映射函数需要向其添加键值对。如果没有对map函数的调用,则将键值对添加到intermKVStore,然后mapreduce没有调用reduce函数,输出数据存储为空。

map函数的一个模板示例是

function myMapper(data, info, intermKVStore) %用数据块添加(intermKVStore, key, value)结束计算

例子:@myMapper

数据类型:function_handle

函数句柄用于减少函数。mapreduce调用reducefun为每个唯一的键添加到中间KeyValueStore通过映射函数。在每一个电话,mapreduce将与活动键关联的值传递给reducefun作为一个ValueIterator对象。的reducefun方法对每个键的值进行循环hasnextgetnext功能。然后,在执行一些计算之后,它将键值对写入最终的输出。

reduce函数的输入是intermKeyintermValIter,outKVStore,这mapreduce自动创建并传递给reduce函数:

  • intermKey活动键是否来自中间体KeyValueStore对象。对reduce函数的每次调用由mapreduce从中间的键中指定一个新的唯一键KeyValueStore对象。

  • intermValIterValueIterator与活动键相关联,intermKey.这ValueIterator对象包含与活动键关联的所有值。使用hasnextgetnext功能。

  • outKVStore决赛的名字是KeyValueStore对象,reduce函数需要向其添加键值对。mapreduce的输出键值对outKVStore然后在输出数据存储中返回,outds,即KeyValueDatastore默认对象。如果没有对reduce函数的调用,则将最后的键值对添加到outKVStore,则输出数据存储为空。

reduce函数的一个模板示例是

函数myReducer(intermValIter, outKVStore) while hasnext(intermValIter) X = getnext(intermValIter);%用当前值进行计算,X结束添加(outKVStore, key, value)结束

例子:@myReducer

数据类型:function_handle

执行环境,指定为MapReducer对象。先生呼叫的结果是mapreduce函数。默认的先生参数是对gcmr,它使用默认的全局执行环境mapreduce(在MATLAB中默认为mapreduce (0),返回SerialMapReducer对象)。

请注意

此设置指定执行环境mapreduce也没必要跑mapreduce在本地计算机上。有关详细信息,请参见使用其他产品加速和部署MapReduce下载188bet金宝搏

名称-值参数

指定可选的逗号分隔对名称,值参数。的名字参数名是和吗价值对应的值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:outds = mapreduce(ds, @mapfun, @reducefun, 'Display', 'off', 'OutputFolder', 'C: Users\username\Desktop')

数据存储输出类型,指定为“二元”“TabularText”.的默认设置“二元”返回一个KeyValueDatastore输出指向二进制的数据存储(.mat.seq)文件在输出文件夹。的“TabularText”选择返回一个tabularTextDatastore输出指向的数据存储. txt输出文件夹中的文件。

该表提供了每种输出类型的详细信息。

“OutputType” 数据存储输出的类型 数据存储指向不同类型的文件 Reduce函数可以添加的值 Reduce函数可以添加的键 细节
“二元”(默认) KeyValueDatastore .mat(或.seq当运行Hadoop时®). 任何有效的MATLAB对象。 不存在的字符向量、字符串或数字标量复杂的,逻辑的,或稀疏的。 N/A
“TabularText” TabularTextDatastore . txt 不存在的字符向量、字符串或数字标量复杂的,逻辑的,或稀疏的。 不存在的字符向量、字符串或数字标量复杂的,逻辑的,或稀疏的。
  • 文件采用UTF-8编码。

  • 键和值为tab (\ t)分离。

  • 行分隔符是\ r \ n在Windows上®,\ n在Linux上®Mac

数据类型:字符|字符串

目标文件夹mapreduce输出,指定为文件路径。默认的输出文件夹是当前文件夹,松材线虫病.可以使用完全限定的路径或相对于当前文件夹的路径指定不同的路径。

例子:mapreduce(…,“OutputFolder”,'MyOutputFolder\Results')为输出指定相对于当前文件夹的文件路径。

数据类型:字符|字符串

切换命令行进度输出,指定为“上”“关闭”.默认值是“上”,所以mapreduce在map和reduce执行阶段期间,在命令窗口中显示进度信息。

数据类型:字符|字符串

输出参数

全部折叠

输出数据存储,返回为KeyValueDatastoreTabularTextDatastore对象。默认情况下,outds是一个KeyValueDatastore对象,指向.mat当前文件夹中的文件。使用名称,值对理由“OutputType”“OutputFolder”返回一个tabularTextDatastore对象或更改输出文件的位置。

mapreduce不对键值对进行排序outds.当使用其他产品时,他们的订单可能会有所不同下载188bet金宝搏mapreduce

查看的内容outds,可以使用预览,或readall的功能数据存储

提示

  • 调试mapreduce检查键值对如何通过不同阶段移动的算法总是有用的。要检查数据的移动,请在映射和reduce函数中设置断点。的执行停止mapreduce,允许您检查相关变量的当前状态,如KeyValueStoreValueIterator.有关详细信息,请参见调试MapReduce算法

  • 一些优化建议mapreduce在任何平台上的性能是:

    • 最小化对map函数的调用次数。最简单的方法是增加ReadSize属性的值。结果是mapreduce将更大的数据块传递给map函数,数据存储会因更少的读取而耗尽。

    • 减少map和reduce函数之间发送的中间数据量。一种方法是使用独特的在map函数中组合类似的键。看到使用MapReduce按组计算平均值这是这个技术的一个例子。

扩展功能

介绍了R2014b