主要内容

开始使用MapReduce

随着数据采集设备的数量和类型,每年的规模和速度数据收集正在迅速扩大。这些大数据集可以包含gb或tb的数据,并且可以生长在每天兆字节或字节的顺序。而这些信息的收集提出见解的机会,也提出了许多挑战。大多数算法都不是为了在合理的时间内处理大数据集或合理数量的内存。MapReduce允许你迎接这些挑战从大型数据集获得重要的见解。

MapReduce是什么?

MapReduce编程技术分析数据集,不适合在内存中。你可能熟悉Hadoop®MapReduce,这是一个流行的实现,使用Hadoop分布式文件系统(HDFS™)。MATLAB®提供了一个稍微不同的MapReduce的技术实现的mapreduce函数。

mapreduce使用数据存储过程数据在小块分别放入内存。每一块经过映射阶段,格式要处理的数据。然后中间数据块通过降低阶段,中间结果的聚合产生一个最终结果。Map和Reduce阶段进行编码地图减少功能,主要输入mapreduce。有无尽的map和reduce函数的组合来处理数据,因此该技术既灵活又极其强大的应对大数据处理任务。

mapreduce便于扩展到在一些环境中运行。有关这些功能的更多信息,请参阅使用其他产品加速和部署MapReduce下载188bet金宝搏

的效用mapreduce功能在于它能够对海量数据进行计算。因此,mapreduce不适合执行计算正常的大小的数据集可以直接加载到计算机内存和分析与传统技术。相反,使用mapreduce进行统计和分析计算一个数据集,不适合在内存中。

每个调用地图或功能降低mapreduce独立于所有其他。例如,调用map函数不能依靠输入或从先前的调用map函数的结果。最好是这样的计算分解成多个调用mapreduce

MapReduce算法阶段

mapreduce移动中的每个数据块输入数据存储在到达最终输出之前通过几个阶段。下图列出了算法的阶段mapreduce

该算法有以下步骤:

  1. mapreduce读取的数据块从输入数据存储使用(数据、信息)=阅读(ds)工作,然后调用map函数块。

  2. map函数接收的数据块,组织或执行一个前兆计算,然后使用添加addmulti功能键-值对添加到一个中间数据存储对象称为KeyValueStore。map函数调用的数量mapreduce等于输入数据存储块的数量。

  3. 在map函数适用于所有的数据块的数据存储,mapreduce在中间组的所有值KeyValueStore对象通过独特的关键。

  4. 接下来,mapreducereduce函数一次呼吁每一个唯一键添加到地图的功能。每一个唯一键可以有多个相关联的值。mapreducereduce函数作为传递值ValueIterator对象,该对象用于遍历值。的ValueIterator对象为每个唯一键包含所有键相关联的值。

  5. reduce函数使用hasnextgetnext函数来遍历中的值ValueIterator对象一次。后,聚合map函数的中间结果,reduce函数将最后一个键值对添加到输出使用添加addmulti功能。钥匙在输出的顺序是一样的reduce函数的顺序将它们添加到决赛KeyValueStore对象。也就是说,mapreduce没有明确排序输出。

    请注意

    reduce函数写最后最后一个键-值对KeyValueStore对象。从这个对象中,mapreduce将键值对输出数据存储,这是一个KeyValueDatastore默认对象。

MapReduce计算例子

这个例子使用一个简单的计算(平均距离的一组飞行数据)来说明运行所需的步骤mapreduce

准备数据

使用的第一步mapreduce构建一个数据存储的数据集。随着map和reduce函数,一个数据集的数据存储是一个需要输入mapreduce,因为它允许mapreduce处理的数据块。

mapreduce与大多数类型的数据存储。例如,创建一个TabularTextDatastore对象的airlinesmall.csv数据集。

ds = tabularTextDatastore (“airlinesmall.csv”,“TreatAsMissing”,“NA”)
ds = TabularTextDatastore属性:文件:{“…\ matlab \ matlab工具箱\ \ demo \ airlinesmall。csv”}文件夹:{”……matlab \ matlab工具箱\ \ demo \”} FileEncoding:“utf - 8”AlternateFileSystemRoots: {} PreserveVariableNames:假ReadVariableNames:真VariableNames:{“年”、“月”、“DayofMonth”……和26}DatetimeLocale: en_US文本格式属性:NumHeaderLines: 0分隔符:”、“RowDelimiter:“\ r \ n”TreatAsMissing:“NA”MissingValue:南高级文本格式属性:TextscanFormats: {% f ', ' % f ', ' % f '……和26}TextType:“字符”ExponentCharacters: eEdD CommentStyle:”空白:“\ b \ t”MultipleDelimitersAsOne:假控制表的属性返回的预览,阅读,readall: SelectedVariableNames:{“年”、“月”、“DayofMonth”……和26}SelectedFormats: {% f ', ' % f ', ' % f '……和26}ReadSize: 20000行OutputType:“表”RowTimes:[]编写特殊属性:SupportedOutputFormats:[“三种”“csv”“xlsx”“xl金宝apps”“铺”“parq”] DefaultOutputFormat:“三”

前面描述的几个选项是有用的mapreduce。的mapreduce函数执行在数据存储中检索数据通过map函数。因此,您可以使用SelectedVariableNames,SelectedFormats,ReadSize选择直接配置的数据块大小和类型mapreduce通过映射函数。

例如,选择距离(总飞行距离)感兴趣的变量作为唯一变量,指定SelectedVariableNames

ds。SelectedVariableNames =“距离”;

现在,每当,readall,或预览函数作用于ds,他们将只返回信息距离变量。为了证实这一点,您可以预览数据存储的前几行数据。这允许您检查的数据的格式mapreduce函数将通过映射函数。

预览(ds)
ans = 8×1表距离在308 296 480 296 373 308 447 954

查看确切的的数据mapreduce将通过map函数,使用

附加信息和一个完整的可用选项的摘要,看看数据存储

编写Map和Reduce函数

mapreduce函数自动调用map和reduce函数在执行期间,所以这些功能必须满足特定的要求正常运行。

  1. map函数的输入数据,信息,intermKVStore:

    • 数据信息调用的结果吗函数对输入数据存储mapreduce在每次调用map函数自动执行。

    • intermKVStore是中间的名字吗KeyValueStore对象的映射函数需要添加键值对。的添加addmulti函数使用这个对象名称添加键值对。如果没有调用map函数添加键值对intermKVStore,然后mapreduce不叫reduce函数和由此产生的数据存储是空的。

    一个简单的映射函数的例子:

    函数MeanDistMapFun(数据、信息、intermKVStore)距离= data.Distance (~ isnan (data.Distance));sumLenValue =[(距离)和长度(距离)];添加(intermKVStore“sumAndLength”,sumLenValue);结束

    这个映射函数只有三行,执行一些简单的角色。第一行过滤掉距离的数据块中的值。第二行创建了一个双元素向量的距离和总数,和第三行补充说,向量的值intermKVStore的关键,“sumAndLength”。在这张地图功能运行在所有的数据块的ds,intermKVStore对象包含每个块的距离和总数距离数据。

    保存这个函数在当前文件夹MeanDistMapFun.m

  2. reduce函数的输入intermKey,intermValIter,outKVStore:

    • intermKey是活跃的map函数添加的关键。每次调用reduce函数mapreduce指定一个新的唯一键键的中间KeyValueStore对象。

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

    • outKVStore最后的名称吗KeyValueStorereduce函数的对象需要添加键值对。mapreduce输出键-值对outKVStore在输出数据存储并返回它们,这是一个KeyValueDatastore默认对象。如果没有调用减少函数添加键值对outKVStore,然后mapreduce返回一个空的数据存储。

    reduce函数是一个简单的例子:

    函数MeanDistReduceFun (intermKey intermValIter outKVStore) sumLen = [0 0];hasnext (intermValIter) sumLen = sumLen + getnext (intermValIter);结束添加(outKVStore“的意思是”sumLen (1) / sumLen (2));结束

    这个减少函数遍历每个距离和统计值intermValIter,保持运行的距离和总数后通过。这个循环后,reduce函数计算总体平均飞行距离与一个简单的部门,然后添加一个关键outKVStore

    保存这个函数在当前文件夹MeanDistReduceFun.m

为编写更高级的map和reduce函数的信息,明白了编写一个映射函数编写一个减少函数

运行mapreduce

数据存储之后,一个映射函数,和减少函数,你可以调用mapreduce执行计算。计算的平均飞行距离的数据集,电话mapreduce使用ds,MeanDistMapFun,MeanDistReduceFun

outds = mapreduce (ds, @MeanDistMapFun @MeanDistReduceFun);
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MAPREDUCE进展* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *地图地图16%减少0% 32% 0%减少0%减少0%地图48%减少0% 65% 0% 81%减少0%地图地图地图100%减少0% 100% 97%减少0%减少100%

默认情况下,mapreduce函数显示进度信息在命令行并返回KeyValueDatastore对象指向当前文件夹中的文件。你可以调整这三个选项使用名称,值对理由“OutputFolder”,“OutputType”,“显示”。有关更多信息,请参见页面的引用mapreduce

查看结果

使用readall函数来读取输出数据存储的键-值对。

readall (outds)
ans = 1×2表键值________ _______{“的意思是”}{[702.1630]}

另请参阅

|

相关的话题