有人可以给我一个实际情况,我们必须使用KeyValueTextInputFormat
和TextInputFormat
??
答案 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