我有一个文件,里面有meterid,hour,watts。。。还有其他领域。我制作了复合键meterid和hour,以及每个meterid的每小时总瓦特数。mr代码适用于单个文件。我有多个文件和文件名是日期一样14-05-2015.txt、15-05-2015.txt等。我执行相同的代码,它添加了对应于meterid和hour的所有watts。但我想瓦茨将总和为每个文件对应的 Jmeter id和小时不是所有的文件。
n3h0vuf21#
为了方便地解决这个问题,您可以在编写的复合键中也包含文件名。这将帮助您在reduce阶段之前将为每个文件分别生成的密钥分组。因此,首先必须从mapper类的setup()方法中找到文件名,可以在mapper setup()方法中使用以下代码段,
String fileName = ((FileSplit) context.getInputSplit()).getPath().toString();
将此文件名也添加到具有相应相等性检查实现的复合键中,这些键将根据解决问题的文件名进行分组。希望这有帮助。
cqoc49vn2#
如果字段是结构化格式,请用field.separater读取字符串数组的整行,在该字符串中,meterid作为key和value=hours*no of watts(s[2]*s[3]),它将适用于所有行。。
2条答案
按热度按时间n3h0vuf21#
为了方便地解决这个问题,您可以在编写的复合键中也包含文件名。这将帮助您在reduce阶段之前将为每个文件分别生成的密钥分组。
因此,首先必须从mapper类的setup()方法中找到文件名,可以在mapper setup()方法中使用以下代码段,
将此文件名也添加到具有相应相等性检查实现的复合键中,这些键将根据解决问题的文件名进行分组。希望这有帮助。
cqoc49vn2#
如果字段是结构化格式,请用field.separater读取字符串数组的整行,在该字符串中,meterid作为key和value=hours*no of watts(s[2]*s[3]),它将适用于所有行。。