hadoop中KeyValueTextInputFormat和TextInputFormat之间的主要区别是什么?

时间:2015-04-27 19:08:34

标签: hadoop mapreduce

有人可以给我一个实际情况,我们必须使用KeyValueTextInputFormatTextInputFormat ??

2 个答案:

答案 0 :(得分:6)

TextInputFormat类将源文件的每一行转换为键/值类型,其中BytesWritable键表示记录的偏移量,Text值表示整个记录本身。

KeyValueTextInputFormat是TextInputFormat的扩展版本,当我们必须将每个源记录作为文本/文本对获取时非常有用,其中通过使用固定分隔符拆分记录来从记录中填充键/值

考虑以下文件内容,

AL#Alabama
AR#Arkansas
FL#Florida

如果配置了TextInputFormat,您可能会看到键/值对为

0    AL#Alabama
14   AR#Arkansas
23   FL#Florida

如果KeyvalueTextInputFormat配置了conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", "#"),您可能会看到结果为

AL    Alabama
AR    Arkansas
FL    Florida

答案 1 :(得分:0)

keyvaluetextinputformat允许您从输入文件中指定键,其中textinputfileformat具有固定键,即字节偏移量。

使用以下方法设置keyvaluetextinputformat的分隔符:

    Configuration conf = new Configuration();
conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", ",");

E.g。您可以使用keyvaluetextinputformat的地方是:

你得到一个逗号/某个字节分隔的文件,你知道第一列可以作为密钥。让我们说工资的CSV,第一栏为姓名/员工ID&第二栏为薪水。

另请参阅此帖:KB2028427