2

我目前有一个包含以下列的交易列表:

TradeID, SellerID, FishType, Price, Qty

我正在寻找

  1. 每个SellerID的计数
  2. 每个FishType数量

目前,我已经编写了一个输出 < FishType , Qty > 的映射器,以便总结每个FishType的Qty。但是,要获得SellerID的计数,我是否必须编写一个单独的 mapreduce 任务?或者有没有办法让我在同一个 mapreduce 任务中这样做?

我考虑过使用计数器,但是,在编码时我不知道记录中的卖家 ID,并且可能有太多无法使用计数器进行跟踪。在我看来,这也是对 Counter 功能的滥用。

请指教。

4

1 回答 1

4

显而易见的方法是有一个单独的 mapreduce 作业。

更棘手的方法是“重载”您的密钥。我猜SellerIDFishType都是字符串。当它是一个SellerID添加"S:"到字符串的前面,而forFishType添加"F:"到字符串的前面。

然后,当你到达 reducer 时,你会得到两种不同类型的reduce函数调用之一:它以 开头"S:",在这种情况下它是 a SellerID,另一种是它以 开头"F:",在这种情况下它是 a FishType。基于此观察,您在减速器中有单独的逻辑。

最后,您使用MultipleOutputs(注意.mapred.vs..mapreduce.版本,它们不兼容)将结果写入两个不同的目录:一个 forFishType和一个 for SellerID


您可能希望为此使用 Pig 或 Hive。

于 2012-09-15T13:24:06.533 回答