使用TAB作为sep的hadoop2.4.0流式通用解析器选项

2024-10-02 14:16:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道选项卡是字段的默认输入分隔符:

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 :

^{pr 3}$

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作为分隔符。在


Tags: keyhadoopfieldmapreduceoutputstream字符
1条回答
网友
1楼 · 发布于 2024-10-02 14:16:18

您可能遇到了这个问题“-Dstream.map.output.字段分隔符=“.”指定“.”作为映射输出的字段分隔符,一行中最多第四个“.”的前缀将是键,行的其余部分(不包括第四个“.”)将是值。如果一行少于四个“.”,那么整行将是键,值将是一个空文本对象(如由new Text(“”)创建的对象)。Here它清楚地提到了分隔符的使用方式,以及在标识映射键和值时需要考虑多少这样的分隔符出现。还有一些与分区相关的字段,根据这些字段处理reducer。因为您希望更改分隔符,我想,您必须验证这也与分区和reducer有关。在

相关问题 更多 >

    热门问题