文档

mapreduce

用于分析不适合存储的数据集的编程技术

语法

Outds = mapreduce(ds,mapfun,reducefun)
Outds = mapreduce(ds,mapfun,reducefun,mr)
Outds = mapreduce(___、名称、值)

描述

例子

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

outds= mapreduce (dsmapfunreducefun先生的运行时配置设置mapreduce.的先生的调用的结果mapreduce函数。通常,这个参数与并行计算工具箱™一起使用,MATLAB®分布式计算服务器™,或MATLAB编译器™.有关更多信息,请参见使用其他产品加速和部署MapReduces manbetx 845

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

例子

全部折叠

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

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

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

预览数据。

预览(ds)
ans =8×1表UniqueCarrier _____________ PS PS PS PS PS PS PS PS PS PS

运行mapreduce在数据上。map和reduce函数计算每个数据块中每个航空公司名称的实例数量,然后将这些中间计数合并为最终计数。该方法利用由执行的惟一键进行中间排序mapreduce.的函数countMapper而且countReducer包含在脚本的末尾。

outds = mapreduce(ds, @ countapper, @countReducer);
******************************** * MAPREDUCE的进展  * ******************************** 地图地图16%减少0% 32% 0%减少0%减少0%地图48%减少0% 65%减少0%地图地图97%减少0% 100% 81%减少0%减少0%地图100%减少10% 100%减少21%地图地图100%减少41% 100% 100%减少31%减少52%地图100%减少62% 100%减少72%地图地图100%减少93% 100% 100%减少83%减少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 UA的[3805][13286]的我们的[13997]WN”[15931]“AQ”[154]

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

函数计数器(数据,信息,intermKV)%计算每个chunk中唯一的航空公司名称。a = data. uniqucarrier;C = num2cell(countcats(a));键=类别(a);addmulti(intermKV, keys, c)结束

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

函数反减速器(键,间隔,outKV)%结合来自所有块的计数产生最终计数。Count = 0;hasnext(intermValIter) data = getnext(intermValIter);Count = Count + data;结束add(outKV, key, count)结束

输入参数

全部折叠

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

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

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

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

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

map函数的一个模板示例是

函数myMapper(data, info, intermKVStore) %用数据块add(intermKVStore, key, value)结束进行计算

例子:@myMapper

数据类型:function_handle

功能手柄减少功能。mapreduce调用reducefun对于添加到中间的每个唯一键都执行一次KeyValueStore通过map函数。在每次通话中,mapreduce将与活动键关联的值传递给reducefun作为一个ValueIterator对象。的reducefun函数循环遍历每个键的值hasnext而且getnext功能。然后,在执行一些计算之后,它将键值对写入最终输出。

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

  • intermKey活动键是来自中间的吗KeyValueStore对象。每次调用reduce函数都通过mapreduce从中间的键中指定一个新的惟一键KeyValueStore对象。

  • intermValIterValueIterator与活动密钥相关联,intermKey.这ValueIterator对象包含与活动键相关联的所有值。方法滚动这些值hasnext而且getnext功能。

  • outKVStore是期末考试的名字吗KeyValueStore对象,reduce函数需要向其添加键值对。mapreduce获取的输出键值对outKVStore并在输出数据存储中返回它们,outds,这是一个KeyValueDatastore对象。如果没有对reduce函数的调用,则将最终键值对添加到outKVStore,则输出数据存储为空。

reduce函数的一个模板示例是

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

例子:@myReducer

数据类型:function_handle

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

请注意

的执行环境mapreduce并不是一定要跑mapreduce在您的本地计算机上。有关更多信息,请参见使用其他产品加速和部署MapReduces manbetx 845

名称-值对实参

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

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

全部折叠

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

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

“OutputType” 数据存储输出的类型 数据存储指向类型为的文件 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.当使用其他产品时,它们的顺序可能不同s manbetx 845mapreduce

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

提示

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

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

    • 尽量减少对map函数的调用次数。最简单的方法是增加的值ReadSize属性的输入数据存储。结果是mapreduce将更大的数据块传递给map函数,数据存储将在更少的读取时耗尽。

    • 减少map和reduce函数之间发送的中间数据量。一种方法是使用独特的在映射函数内组合相似的键。看到使用MapReduce计算组均值下面是该技术的一个示例。

在R2014b中引入

这个话题有帮助吗?