主要内容

mapreduce

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

描述

例子

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

outds= mapreduce (dsmapfunreducefun先生)可选地指定的运行时配置设置mapreduce.的先生类调用的结果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表UniqueCarrier _____________ 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的}{[3805]}{UA的}{[13286]}{‘我们’}{[13997]}{的WN} {[15931]} {AQ的}{[154]}⋮

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

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

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

函数计数器减速器(key, intervaliter, outKV)组合来自所有块的计数以生成最终计数。计数= 0;hasnext(interval valiter) data = getnext(interval valiter);计数=计数+数据;结束添加(outKV, key, count)结束

输入参数

全部折叠

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

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

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

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

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

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

映射函数的模板示例如下

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

请注意

的执行环境mapreduce并且没有必要运行mapreduce在您的本地计算机上。有关更多信息,请参见使用其他产品加速和部署MapReduce下载188bet金宝搏

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子: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.当使用其他产品时,它们的顺序可能不同下载188bet金宝搏mapreduce

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

提示

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

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

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

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

扩展功能

版本历史

在R2014b中引入