如何使用mr代码在hadoop中处理单个文件

i2loujxw  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(243)

我有一个文件,里面有meterid,hour,watts。。。还有其他领域。我制作了复合键meterid和hour,以及每个meterid的每小时总瓦特数。mr代码适用于单个文件。
我有多个文件和文件名是日期一样
14-05-2015.txt、15-05-2015.txt等。
我执行相同的代码,它添加了对应于meterid和hour的所有watts。但我想瓦茨将总和为每个文件对应的 Jmeter id和小时不是所有的文件。

n3h0vuf2

n3h0vuf21#

为了方便地解决这个问题,您可以在编写的复合键中也包含文件名。这将帮助您在reduce阶段之前将为每个文件分别生成的密钥分组。
因此,首先必须从mapper类的setup()方法中找到文件名,可以在mapper setup()方法中使用以下代码段,

String fileName = ((FileSplit) context.getInputSplit()).getPath().toString();

将此文件名也添加到具有相应相等性检查实现的复合键中,这些键将根据解决问题的文件名进行分组。希望这有帮助。

cqoc49vn

cqoc49vn2#

如果字段是结构化格式,请用field.separater读取字符串数组的整行,在该字符串中,meterid作为key和value=hours*no of watts(s[2]*s[3]),它将适用于所有行。。

相关问题