gpt4 book ai didi

hadoop - 如何在 Hadoop 中将对象作为值传递

转载 作者:可可西里 更新时间:2023-11-01 16:27:02 25 4
gpt4 key购买 nike

在 Hadoop 中是否允许传递对象(如树)作为映射器的输出值?是这样,怎么样?

最佳答案

扩展 Tariq 的链接,并简单地详细说明 <Text, IntWritable> 的一种可能实现方式树状图:

public class TreeMapWritable extends TreeMap<Text, IntWritable> 
implements Writable {

@Override
public void write(DataOutput out) throws IOException {
// write out the number of entries
out.writeInt(size());
// output each entry pair
for (Map.Entry<Text, IntWritable> entry : entrySet()) {
entry.getKey().write(out);
entry.getValue().write(out);
}
}

@Override
public void readFields(DataInput in) throws IOException {
// clear current contents - hadoop re-uses objects
// between calls to your map / reduce methods
clear();

// read how many items to expect
int count = in.readInt();
// deserialize a key and value pair, insert into map
while (count-- > 0) {
Text key = new Text();
key.readFields(in);

IntWritable value = new IntWritable();
value.readFields(in);

put(key, value);
}
}
}

基本上,Hadoop 中的默认序列化工厂期望对象输出实现 Writable 接口(interface)(上面详述的 readFields 和 write 方法)。通过这种方式,您几乎可以扩展任何类来改进序列化方法。

另一个选项是启用 Java 序列化(它使用默认的 java 序列化方法)org.apache.hadoop.io.serializer.JavaSerialization通过配置 io.serializations配置属性,但我不建议这样做。

关于hadoop - 如何在 Hadoop 中将对象作为值传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13961833/

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