可能这可以帮助你。我从 apache 中找到了这个... org
自定义将行拆分为键/值对的方式 如前所述,当 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 对象(如由 new Text("") 创建的对象)。
类似地,您可以使用-D stream.reduce.output.field.separator=SEP
and-D stream.num.reduce.output.fields=NUM
指定一行 reduce 输出中的第 n 个字段分隔符作为键和值之间的分隔符。
同样,您可以将stream.map.input.field.separator
and指定stream.reduce.input.field.separator
为 map/reduce 输入的输入分隔符。默认情况下,分隔符是制表符。