主要内容

mapreduce

用于分析不能装入内存的数据集的编程技术

描述

例子

outds= mapreduce (ds,mapfun,reducefun)应用映射函数mapfun输入数据存储ds,然后将与每个惟一键相关联的值传递给reduce函数reducefun。输出数据存储为aKeyValueDatastore指向的物体.mat当前文件夹中的文件。

outds= mapreduce (ds,mapfun,reducefun,先生)可选地指定的运行时配置设置mapreduce。的先生的调用的结果mapreduce函数。通常,此参数与并行计算工具箱™一起使用,MATLAB®并行服务器™,或MATLAB编译器™。有关更多信息,请参见使用其他产品加速部署MapReduces manbetx 845

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

例子

全部折叠

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

属性创建数据存储airlinesmall.csv数据集。这个12兆字节的数据集包含几家航空公司的29列航班信息,包括到达和起飞时间。本例中选择UniqueCarrier(航空公司名称)作为利息变量。指定“TreatAsMissing”名称-值对,以便数据存储处理“NA”值为missing,并指定“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

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

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的}{[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读取map函数生成的中间数据,并将所有计数相加,为每个航空公司生成一个最终计数。

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

输入参数

全部折叠

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

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

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

map函数的输入是数据,信息,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函数使用。遍历每个键的值hasnextgetnext功能。然后,在执行一些计算之后,它将键值对写入最终的输出。

reduce函数的输入为intermKey,intermValIter,outKVStore,这mapreduce自动创建并传递给reduce函数:

  • intermKey活动键来自中间端吗KeyValueStore对象。每一次对reduce函数的调用mapreduce从中间密钥中指定一个新的唯一密钥KeyValueStore对象。

  • intermValIterValueIterator与活动键相关联,intermKey。这ValueIterator对象包含与活动键相关联的所有值。控件滚动这些值hasnextgetnext功能。

  • 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函数。默认的先生参数是对gcmr,它使用默认的全局执行环境mapreduce(在MATLAB中,默认值是mapreduce (0),它将返回SerialMapReducer对象)。

请注意

此设置指定的执行环境mapreduce也没有必要跑mapreduce在您的本地计算机上。有关更多信息,请参见使用其他产品加速部署MapReduces manbetx 845

名称-值对的观点

指定可选的,以逗号分隔的对名称,值参数。的名字参数name和价值是对应的值。的名字必须出现在引号内。可以按任意顺序指定多个名称和值对参数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。当使用其他产品时,他们的订单可能会有所不同s manbetx 845mapreduce

浏览outds,可以使用预览,,或readall的功能数据存储

提示

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

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

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

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

扩展功能

介绍了R2014b