在LoadFunc.getNext()中跳过记录

时间:2011-04-22 19:06:48

标签: java hadoop apache-pig

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

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

提前致谢。

1 个答案:

答案 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;

纠正了我愚蠢的错误