我有一个文件,包含fileid meterid,hour,watts ......以及其他一些字段。 我为每个meterid制作了每小时的复合键米,小时和总和瓦数。 MR代码适用于单个文件。
我有多个文件和文件名是日期,如
14-05-2015.txt,15-05-2015.txt等。
我执行相同的代码并添加与meterid和hour相对应的所有瓦特。 但是我希望瓦特会对每个文件的总和,而不是对于所有文件都是米和小时。
答案 0 :(得分:2)
要轻松解决此问题,您可以在组成的复合键中包含文件名。这将帮助您在减少阶段之前单独对为每个文件生成的密钥进行分组。
首先,您必须从Mapper类的setup()方法中找到文件名,您可以在mapper setup()方法中使用以下代码段,
String fileName = ((FileSplit) context.getInputSplit()).getPath().toString();
在您的复合键中添加此文件名以及相应的相等检查实现,并且将根据文件名对键进行分组,这将解决您的问题。希望这有帮助。
答案 1 :(得分:0)
如果您的字段是结构化格式,请使用field.sepeater读取字符串数组的整行,在此字符串中将数组米ID作为键,值=小时*瓦特数(S [2] * s [3] ),它适用于所有线路。