在网上,我看到这么多的例子,规范的字数Map减少走查。我理解mapper输入k,v=>来减少k,list(v)的输入。有些魔法是通过MapReduce来实现的。我不太明白如何将mapreduce应用到更实际的例子中。例如:假设我有一个包含美国所有雇员工资的文件,还有一些其他细节,比如州和城市等。。。mapreduce如何提供包含以下列的输出报告?州、市、平均工资
在sql中,我可以通过以下查询得到:
Select state, city, avg(salaries)
From employee_tbl
Group by state, city
如何将Map减少工作给我以上的结果集。我使用过hive,但不知道sql是如何被转换成map和reduce的。
2条答案
按热度按时间s8vozzvw1#
如果您想将一个sql查询直接转换为一组map/reduce作业,那么您一定要看看ysmart。它只是一个在hadoop之上构建的Map/缩减sql。还有一些研究表明它可能比Hive更快,尽管我不能支持这个说法,因为我自己还没有测试过。
根据他们的文件,ysmart提供:
高性能:优化了ysmart生成的mapreduce程序。在转换查询时,ysmart可以自动检测和利用查询内的相关性。这种相关感知能力显著减少了冗余计算、不必要的磁盘io操作和网络开销。请参阅性能页面以了解ysmart的性能优势。
高扩展性:ysmart易于修改和扩展。它的设计目标是可扩展性。ysmart的主要部分是用python实现的,这使得代码更容易理解。由于它的模块性和脚本性质,用户可以很容易地修改当前的功能或向ysmart添加新的功能。
灵活性高:ysmart可以在两种不同的模式下运行:翻译模式和执行模式。在转换模式下,ysmart仅将查询转换为java代码,而在执行模式下,ysmart还将编译和执行生成的代码。由于这种灵活性,用户可以轻松地阅读、修改和定制生成的代码。
nhn9ugyo2#
在map reduce作业中转换sql查询的一种简单方法是使用hive over hadoop。
但是,如果您不想这样做,那么可以在大多数示例中应用一个简单的经验法则,同时将sql查询模拟为map reduce作业-
map函数中的键是groupby子句中的列。
在您的示例中,让state city作为一个键,您将在map函数中输出它(在它们之间使用一些分隔符)。
map函数中的value out是要在其上运行聚合函数的列。
在您的示例中,它将是单个salary(如果要聚合的列超过1列,则可以使用相同的分隔符分隔w)。
键入还原与键出Map功能相同
.
reduce函数中的value out将是对具有相同键的所有行中的value out运行聚合函数后的值
因此,在本例中,您只需将所有的value in(salary)相加,value out将是唯一的“state-city”对中的薪资总和。