0

我有一个特定产品销售的日志数据,如下所示

   product     date              time   Rs
   red ballons 2012-10-02       0128    1000
   blue socks  2012-10-02       0003    3498
   current     2012-10-02       0120    0987
   red ballons 2012-10-02       0056    1000
   blue socks   2012-10-02      0059    6764

有人可以给我建议,告诉我如何编写java mapreduce计算每小时和每 12 小时的产品销售量,我是新来的mapreduce。我需要了解映射器应该如何选择它的键以及单个地图减少工作将如何提供一小时销售和 12 小时销售的分析任何帮助都会让我进一步思考谢谢

4

1 回答 1

0

让您的映射器为每个条目确定一个或多个时间组件(日期和小时、日期和 12 小时等),并为它们提供一个唯一标识符。使用映射器编写时,使用唯一标识符作为您的密钥,并将每个产品销售金额作为您的值。

您的减速器将收到您每个时期的所有销售额。您需要做的就是计算所有金额的总和。

假设您要执行多个时间段,则需要 1 和 12 小时的时间段。我会创建一个 stripHours 函数,比如这个。

public static Date stripHours(Date date, int hours) {
    long offsetMillis = date.getTimezoneOffset() * 60000l;
    long timePeriod = hours * 3600000l;
    return new Date(((date.getTime() - offsetMillis) / timePeriod) * timePeriod + offsetMillis);
}

对于映射器的每一行输入,用 key=stripHours(date, 1) 写一行,用 key=stripHours(date, 12) 写另一行。在这两种情况下,将值作为产品销售金额。

当然,您需要一些方法来区分 1 小时类型的键和 12 小时类型的键。一个非常简单的方法是使用某种字符串连接,例如“12” + strippedDate.getTime() 和“1” + strippedDate.getTime(),但我相信你可以弄清楚细节。

于 2013-10-27T15:23:15.700 回答