输入数据集如下所示:
可乐,COLB,COLC,时间
1,2,1,2012-12-22 12:23:30
1,2,3,2012-12-22 12:23:40
1,2,2,2012-12-22 12:24:20
2,3,1,2012-12-22 12:25:30
输出将是下一次和当前时间的差异,即,(时间+ 1 - 时间)。请参阅输出列以获取更多信息。
可乐,COLB,COLC,时间,输出
1,2,1,2012-12-22 12:23:30,10
1,2,2,2012-12-22 12:23:40,40
1,2,3,2012-12-22 12:24:20,0
2,3,1,2012-12-22 12:25:30,0
非常感谢您的帮助
答案 0 :(得分:2)
前两列应该是关键。使用TextInputFormat
读取输入文本文件。 Mapper应该发出Text object colA_colB
。例如。对于数据
1,2,2012-12-22 12:23:30
1,2,2012-12-22 12:23:40
1,2,2012-12-22 12:24:20
2,3,2012-12-22 12:25:30
mapper会得到(key,val):
<some long integer X1>, "1,2,2012-12-22 12:23:30"
<some long integer X2>, "1,2,2012-12-22 12:23:40"
<some long integer X3>, "1,2,2012-12-22 12:24:20"
<some long integer X4>, "2,3,2012-12-22 12:25:30"
“some long integer”只是输入文件中行的文件偏移量
Mapper应该发出类型Text下面的(键,值)对:
"1_2" , "2012-12-22 12:23:30"
"1_2" , "2012-12-22 12:23:40"
"1_2" , "2012-12-22 12:24:20"
"2_3" , "2012-12-22 12:25:30"
如你所见,前三个记录的键是相同的,那些肯定会被射到同一个减速器。减速器会得到这个:
"1_2" , ["2012-12-22 12:23:30", "2012-12-22 12:23:40", "2012-12-22 12:24:20"]
"2_3" , ["2012-12-22 12:25:30"]
在reducer中,get the String from the Text objects并解析那些以生成Java Date个对象。在此之后,两个日期之间的差异将是直接的。