我知道选项卡是字段的默认输入分隔符:
stream.map.output.field.separator
stream.reduce.input.field.separator
stream.reduce.output.field.separator
mapreduce.textoutputformat.separator
但如果我尝试编写通用解析器选项:
^{pr2}$测试hadoop在用作分隔符时如何解析诸如“\t、\n、\f”之类的空白字符。我注意到hadoop将其读作\t字符,而不是“" tab space itself. I checked it by printing each line in reducer (python) as it reads using :
My mapper emits key/value pairs as : key value1 value2
使用print (key,value1,value2,sep='\t',end='\n')
命令。在
所以我希望我的减速机也能把每一行都读成:key value1 value2
,而不是{
key value1 value2 \\with trailing space
从Hadoop streaming - remove trailing tab from reducer output开始,我了解到尾随空格是由于mapreduce.textoutputformat.separator
未设置并保留为默认值。在
因此,这证实了我的假设,hadoop考虑了我的总地图输出:
key value1 value2
因为它将stream.map.output.field.separator=\t
中的分隔符作为“\t”字符而不是“”制表符本身来读取,所以将键和值作为空文本对象。在
请帮助我理解此行为,以及如果需要,如何使用\t作为分隔符。在
您可能遇到了这个问题“-Dstream.map.output.字段分隔符=“.”指定“.”作为映射输出的字段分隔符,一行中最多第四个“.”的前缀将是键,行的其余部分(不包括第四个“.”)将是值。如果一行少于四个“.”,那么整行将是键,值将是一个空文本对象(如由new Text(“”)创建的对象)。Here它清楚地提到了分隔符的使用方式,以及在标识映射键和值时需要考虑多少这样的分隔符出现。还有一些与分区相关的字段,根据这些字段处理reducer。因为您希望更改分隔符,我想,您必须验证这也与分区和reducer有关。在
相关问题 更多 >
编程相关推荐