简化用于聚合销售数据的级联管道

时间:2012-04-17 19:47:06

标签: hadoop cascading

我对Cascading和Hadoop都很新,所以要温柔...... :-D

我认为我发现自己过度工程化了。基本上我的情况是我有一个包含9个字段的管道分隔文件。我想使用不同的分组计算这9个字段的一些汇总统计数据。结果应该是10个字段,其中只有6个是计数或总和。到目前为止,我有4个独特的管道,4个CountBy管道,1个SumBy,1个GroupBy,1个每个,2个,5个CoGroups以及其他几个。我需要添加另一小部分功能,我能看到的唯一方法就是添加2个过滤器,2个以上的CoGroup以及2个以上的每个管道。这一切似乎只是为了计算一些汇总的统计数据而过度杀戮。所以我想我真的误解了什么。

我的输入文件如下所示:

storeID | invoiceID | groupID | customerID | transaction date | quantity | price | item type | customer type

对于库存,服务或组项目,项目类型为“I”,“S”或“G”,客户属于组。其余的应该是不言自明的

我想要的结果是:

project ID | storeID | year | month | unique invoices | unique groups | unique customers | customer visits | inventory type sales | service type sales |

项目ID是一个常数,客户访问是指客户进入并购买东西的月份中的天数

我正在使用的设置现在使用TextDelimited Tap作为我的源来读取文件并将记录传递给每个管道,该管道使用DateParser来解析交易日期并添加年,月和日字段。到现在为止还挺好。这是失控的地方。

我正在将流从那里拆分为5个单独的流来处理我想要的每个聚合字段。然后我将所有结果连接在5个CoGroup管道中,通过Insert(插入项目ID)和通过TextDelimited sink Tap发送结果。

是否有比分割成5个流更简单的方法?前四个流在不同的领域几乎完全相同。例如,第一个流使用唯一管道来获取唯一的invoiceID然后使用CountBy来计算具有相同storeID,年和月的记录数。这为我提供了按年份和月份为每个商店创建的唯一发票数量。然后有一个流与groupID执行相同的操作,另一个使用customerID执行相同操作。

有什么简化这个想法吗?必须有一个更简单的方法。

0 个答案:

没有答案