Hadoop 在一个MapReduce中计算多个关键点

Hadoop 在一个MapReduce中计算多个关键点,hadoop,mapreduce,Hadoop,Mapreduce,我目前有一个包含以下列的交易列表: TradeID, SellerID, FishType, Price, Qty 我正在找一份工作 每个SellerID的计数 每种鱼种的数量 目前,我已经编写了一个映射器,它输出鱼型,数量>,以便汇总每个鱼型的数量。但是,要获得SellerID的计数,我是否必须编写一个单独的mapreduce任务?或者,在同一个mapreduce任务中,我有没有办法做到这一点 我已经考虑过使用计数器,但是,在编码时,记录中的sellerID对我来说是未知的,并且可能有太多的

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

TradeID, SellerID, FishType, Price, Qty
我正在找一份工作

  • 每个SellerID的计数
  • 每种鱼种的数量
  • 目前,我已经编写了一个映射器,它输出鱼型数量>,以便汇总每个鱼型数量。但是,要获得SellerID的计数,我是否必须编写一个单独的mapreduce任务?或者,在同一个mapreduce任务中,我有没有办法做到这一点

    我已经考虑过使用计数器,但是,在编码时,记录中的sellerID对我来说是未知的,并且可能有太多的计数器无法跟踪使用计数器的情况。在我看来,这也是对反功能的滥用


    请给出建议。

    显而易见的方法是使用单独的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框架。谢谢