无法使用hadoop mapreduce中的KeyValueTextInputFormat解析输入

时间:2014-09-26 08:13:55

标签: hadoop mapreduce delimiter

我的输入文件是这样的:

Key1 : Value1,Value2
Ket2 : Value3,Value4

在mapper中,我希望获得一个键,其中":"是分隔符。为此,我的代码是这样的:

JobConf conf = new JobConf(newCount.class);    
conf.set("mapred.input.keyvaluelinerecordreader.key.value.separator", ":")    
conf.setInputFormat(KeyValueTextInputFormat.class);

我也尝试过:

conf.set("key.value.separator.in.line.input.line", ":")

但无法解析。当我打印密钥时,它会像这样打印 - > key: 我只打印---> Key

3 个答案:

答案 0 :(得分:1)

如果您使用的是新API(hadoop 2.x),我会从API看到要设置的正确参数为mapreduce.input.keyvaluelinerecordreader.key.value.separator

即,使用mapreduce代替mapred

更新:也可能是分隔符“:”在输入中出现多次。例如,如果输入记录是key1: : value1 value2 value3,那么您将获得类似于您在问题中描述的内容。如果是这种情况,那么您应该正确选择分隔符,以便它恰好出现一次。

答案 1 :(得分:1)

如果使用Hadoop 2.x,则参数为

  

mapreduce.input.keyvaluelinerecordreader.key.value.separator

你能分享输入数据的样本吗?

答案 2 :(得分:0)

How to change the default key-value output seperator in Hadoop MapReduce

对于KeyValueTextInputFormat,输入行应该是由"\t"分隔的键值对

Key1     Value1,Value2

通过更改默认分隔符,您可以按照自己的意愿阅读。

对于新Api

Here is the solution

//New API
Configuration conf = new Configuration();
conf.set("key.value.separator.in.input.line", ","); 
Job job = new Job(conf);
job.setInputFormatClass(KeyValueTextInputFormat.class);