可能这会帮助你。我发现这个来自Apache的......组织
定制方式来分割线成键/值对 正如前面提到的,当的Map/Reduce框架读取来自映射器的标准输出线,它将该行成键/值对。默认情况下,直到第一个制表符的行的前缀是键,而行的其余部分(不包括制表符)是值。
但是,您可以自定义此默认值。您可以指定除制表符(默认值)以外的字段分隔符,并且可以指定第n个(n> = 1)字符而不是行(默认值)中的第一个字符作为键和值之间的分隔符。例如:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-input myInputDirs \
-output myOutputDir \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper \
-reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-D stream.map.output.field.separator=. \
-D stream.num.map.output.key.fields=4
在上例中,-D stream.map.output.field.separator=.
指定了“。”。作为地图输出的字段分隔符,以及直到第四个“。”的前缀。在一行中将是关键,并且该行的其余部分(不包括第四个“。”)将是该值。如果一行少于四个“。”,那么整行将是关键字,并且该值将是一个空的Text对象(如由新Text(“”)创建的那个)。
同样,您可以使用-D stream.reduce.output.field.separator=SEP
和-D stream.num.reduce.output.fields=NUM
指定reduce输出行中的第n个字段分隔符作为键和值之间的分隔符。
同样,您可以指定stream.map.input.field.separator
和stream.reduce.input.field.separator
作为map/reduce输入的输入分隔符。默认情况下,分隔符是制表符。
来源
2012-01-09 08:19:26
ssx
它通过sys.stdin进入 –