day*_*mer 2 python hadoop mapreduce hadoop-streaming
因此,当我们Java
用于编写map/reduce
程序时,地图会收集数据,而reducer会收到每个键的值列表,例如
Map(k, v) -> k1, v1
then shuffle and sort happens
then reducer gets it
reduce(k1, List<values>)
Run Code Online (Sandbox Code Playgroud)
继续努力.但有可能做同样与python
使用streaming
?我使用它作为参考,似乎reducer获取命令行提供的每行数据
小智 5
可能这可以帮到你.我从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
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,-D stream.map.output.field.separator=.
指定"." 作为地图输出的字段分隔符,以及直到第四个"."的前缀.在一行中将是键,行的其余部分(不包括第四个".")将是值.如果一行少于四个".",则整行将成为键,值将为空文本对象(如新文本("")创建的那个).
类似地,您可以使用-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
作为地图输入分离器/减少输入.默认情况下,分隔符是制表符.
归档时间: |
|
查看次数: |
5848 次 |
最近记录: |