Hadoop 在一个MapReduce中计算多个关键点
我目前有一个包含以下列的交易列表:Hadoop 在一个MapReduce中计算多个关键点,hadoop,mapreduce,Hadoop,Mapreduce,我目前有一个包含以下列的交易列表: TradeID, SellerID, FishType, Price, Qty 我正在找一份工作 每个SellerID的计数 每种鱼种的数量 目前,我已经编写了一个映射器,它输出鱼型,数量>,以便汇总每个鱼型的数量。但是,要获得SellerID的计数,我是否必须编写一个单独的mapreduce任务?或者,在同一个mapreduce任务中,我有没有办法做到这一点 我已经考虑过使用计数器,但是,在编码时,记录中的sellerID对我来说是未知的,并且可能有太多的
TradeID, SellerID, FishType, Price, Qty
我正在找一份工作
请给出建议。显而易见的方法是使用单独的mapreduce作业 要做到这一点,更棘手的方法是“过载”你的钥匙。我猜
SellerID
和FishType
都是字符串。当它是一个SellerID
时,将“S:
添加到字符串的前面,对于FishType,将“F:
添加到字符串的前面
然后,当您到达reducer时,您将得到reduce
函数的两种不同类型的调用中的一种:它以S:
开头,在这种情况下它是SellerID
,在这种情况下它以FishType:
开头。根据这一观察,在减速器中有单独的逻辑
最后,使用(小心.mapred.
与.mapreduce.
版本,它们不兼容)将结果写入两个不同的目录:一个用于FishType
,另一个用于SellerID
您可能需要使用Pig或Hive来完成此操作。显而易见的方法是使用单独的mapreduce作业
要做到这一点,更棘手的方法是“过载”你的钥匙。我猜SellerID
和FishType
都是字符串。当它是一个SellerID
时,将“S:
添加到字符串的前面,对于FishType,将“F:
添加到字符串的前面
然后,当您到达reducer时,您将得到reduce
函数的两种不同类型的调用中的一种:它以S:
开头,在这种情况下它是SellerID
,在这种情况下它以FishType:
开头。根据这一观察,在减速器中有单独的逻辑
最后,使用(小心.mapred.
与.mapreduce.
版本,它们不兼容)将结果写入两个不同的目录:一个用于FishType
,另一个用于SellerID
您可能需要使用Pig或Hive来实现此目的。我一直在考虑您的“前缀”解决方案。虽然我不明白这为什么行不通,但我担心它是否真的违背了MapReduce框架的全部目的。由于框架将无法对中间键执行正确的分组和排序,即键基本上不按FishType或SellerID排序,因此键不会连续输入到减缩器中,从而导致输出分离。All things“F:Salmon”
将发送到同一减速器,并一起进行分析。这就是你所说的脱节吗?你在这里所做的就是重载键空间以同时执行两个任务。啊,是的,你是对的。我仍然在试图了解整个mapreduce框架。谢谢。我一直在考虑你的“前缀”解决方案。虽然我不明白这为什么行不通,但我担心它是否真的违背了MapReduce框架的全部目的。由于框架将无法对中间键执行正确的分组和排序,即键基本上不按FishType或SellerID排序,因此键不会连续输入到减缩器中,从而导致输出分离。All things“F:Salmon”
将发送到同一减速器,并一起进行分析。这就是你所说的脱节吗?你在这里所做的就是重载键空间以同时执行两个任务。啊,是的,你是对的。我仍然在试图了解整个mapreduce框架。谢谢