1

我正在扩展 LoadFunc。在 getNext 函数中,我想在某些条件下跳过返回元组 - 这样我只能加载数据文件的样本。我尝试为我不想返回的行返回 null,但问题是该方法在返回第一个 null Tuple 后终止。

有谁知道这样做的方法?我应该用不同的方法吗?

提前致谢。

4

1 回答 1

4

(假设您是指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;

纠正了我愚蠢的错误

于 2011-04-22T20:07:25.173 回答