gpt4 book ai didi

hadoop - 如何在 hadoop 的默认 Linerecordreader 中设置值

转载 作者:可可西里 更新时间:2023-11-01 16:55:53 24 4
gpt4 key购买 nike

一旦 Jobtracker 使用 InputFormat 类的 getsplits() 函数获取 Splits。然后jobtracker根据split的存储位置分配maptasks,maptask调用InputFormat类中的createrecordreader()方法,InputFormat类又调用linerecordreader类。initialize函数获取开始、结束位置,nextkeyvalue()设置key、value。这是我的查询,键是根据下面的代码用 pos 设置的。但是值是如何设置的。

public boolean  nextKeyValue() throws IOException {
if (key == null) {
key = new LongWritable();
}
key.set(pos);
if (value == null) {
value = new Text();
}
int newSize = 0;
while (pos < end) {
newSize = in.readLine(value, maxLineLength,
Math.max((int)Math.min(Integer.MAX_VALUE, end-pos),maxLineLength))
if (newSize == 0) {
break;
}
pos += newSize;
if (newSize < maxLineLength) {
break;
}
// line too long. try again
LOG.info("Skipped line of size " + newSize + " at pos " +
(pos - newSize));
}
if (newSize == 0) {
key = null;
value = null;
return false;
} else {
return true;
}
}

最佳答案

在nextKeyValue()中,计算的时候

newSize = in.readLine(value, maxLineLength,
Math.max((int)Math.min(Integer.MAX_VALUE, end-pos),maxLineLength))

这里 readLine 会将数据填充到值对象中。可以引用readLine实现here

if (appendLength > 0) {
str.append(buffer, startPosn, appendLength);
txtLength += appendLength;
}

可以引用this article在 SO 中了解实际的值(value)传递是如何工作的。

关于hadoop - 如何在 hadoop 的默认 Linerecordreader 中设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30002340/

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