gpt4 book ai didi

python - hadoop 流 : how to give list of key values to reducer?

转载 作者:可可西里 更新时间:2023-11-01 14:43:31 25 4
gpt4 key购买 nike

所以当我们使用 Java 编写 map/reduce 程序时,map 收集数据,reducer 接收每个键的值列表,例如

Map(k, v) -> k1, v1  
then shuffle and sort happens
then reducer gets it

reduce(k1, List<values>)

继续努力。但是是否可以使用 streamingpython 做同样的事情?我用了this作为引用,reducer 似乎按照命令行提供的每行获取数据

最佳答案

也许这可以帮助你。我从 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=. 指定了“.”作为 map 输出的字段分隔符,前缀到第四个“。”在一行中将是键,该行的其余部分(不包括第四个“.”)将是值。如果一行少于四个“.”,则整行将是键,值将是一个空的 Text 对象(类似于 new Text("") 创建的对象)。

同样,您可以使用-D stream.reduce.output.field.separator=SEP-D stream.num.reduce.output.fields=NUM 来指定一行 reduce 输出中的第 n 个字段分隔符作为键和值之间的分隔符。

同样,您可以指定 stream.map.input.field.separatorstream.reduce.input.field.separator 作为 map/reduce 输入的输入分隔符.默认情况下,分隔符是制表符。

关于python - hadoop 流 : how to give list of key values to reducer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7665357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com