我正在扩展 LoadFunc。在 getNext 函数中,我想在某些条件下跳过返回元组 - 这样我只能加载数据文件的样本。我尝试为我不想返回的行返回 null,但问题是该方法在返回第一个 null Tuple 后终止。
有谁知道这样做的方法?我应该用不同的方法吗?
提前致谢。
我正在扩展 LoadFunc。在 getNext 函数中,我想在某些条件下跳过返回元组 - 这样我只能加载数据文件的样本。我尝试为我不想返回的行返回 null,但问题是该方法在返回第一个 null Tuple 后终止。
有谁知道这样做的方法?我应该用不同的方法吗?
提前致谢。
(假设您是指Pig 中的LoadFunc ...)
我建议编写一个新方法来完成您想要做的事情,而不是破坏该getNext()
方法的原始记录使用。
您应该查看扩展的 Pig 类的源代码LoadFunc
并了解它们是如何实现getNext()
的。例如:文本加载器
从那里开始,做你想做的事情应该是相当微不足道的。
编辑以尝试提供更详细的帮助:
(这里以 TextReader 为例)
该getNext()
方法是从RecordReader
. 它通过调用RecordReader.nextKeyValue()
前进到下一条记录来做到这一点。您检查这是否为真(意味着它读取了一条记录),如果是,则调用RecordReader.getCurrentValue()
以检索该值。
假设您只希望每五分之一作为样本getNext()
:
int count = 0;
Text myText = null;
whlie(myRecordReader.nextKeyValue() == true)
{
if (count == 4)
{
myText = (Text) myRecordReader.getCurrentValue();
break;
}
count++;
}
if (myText != null) // we didn't hit the end; we have a record
{
... // create the tuple
return myTuple;
}
else
return null;
(纠正了我愚蠢的错误)