我的输入文件是这样的:
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
答案 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
//New API
Configuration conf = new Configuration();
conf.set("key.value.separator.in.input.line", ",");
Job job = new Job(conf);
job.setInputFormatClass(KeyValueTextInputFormat.class);