我正在扩展LoadFunc。在getNext函数中,我想在某些条件下跳过返回元组 - 这样我只能加载数据文件的样本。我尝试为我不想返回的行返回null但问题是该方法在返回第一个空元组后终止。
有谁知道这样做的方法?我应该用不同的方法吗?
提前致谢。
答案 0 :(得分:4)
(假设你的意思是猪的LoadFunc ...)
我建议您编写一种新方法,只需不要破坏getNext()
方法的原始文档使用,就可以执行您想要的操作。
您应该查看扩展LoadFunc
的Pig类的源代码,并了解它们如何实现getNext()
。例如:TextLoader
从那里做你想做的事情应该是相当微不足道的。
修改以尝试提供更详细的帮助:
(这是以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;
(纠正了我愚蠢的错误)