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



我的输入文件如下:

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);

相关内容

  • 没有找到相关文章

最新更新