我的输入文件如下:
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
如果使用Hadoop2.x,参数为
mapreduce.input.keyvaluelinerecordreader.key.value.separator
你能分享你的输入数据样本吗??
如果您正在使用新的API(hadoop2.x),我从API中看到要设置的正确参数是mapreduce.input.keyvaluelinerecordreader.key.value.separator
。
即,使用mapreduce
,而不是mapred
。
UPDATE:也可能是分隔符":"在您的输入中多次出现。例如,如果一个输入记录是key1: : value1 value2 value3
,那么你会得到你在问题中描述的内容。如果是这种情况,那么您应该正确选择分隔符,以便它只出现一次。
如何更改Hadoop MapReduce 中的默认键值输出分隔符
对于KeyValueTextInputFormat,输入行应该是由"t"
分隔的键值对
Key1 Value1,Value2
通过更改默认分隔符,您将能够随心所欲地阅读。
对于新Api
这是的解决方案
//New API
Configuration conf = new Configuration();
conf.set("key.value.separator.in.input.line", ",");
Job job = new Job(conf);
job.setInputFormatClass(KeyValueTextInputFormat.class);