Java 跳过LoadFunc.getNext()中的记录

Java 跳过LoadFunc.getNext()中的记录,java,hadoop,apache-pig,Java,Hadoop,Apache Pig,我正在扩展LoadFunc。在getNext函数中,我想在某些条件下跳过返回元组的步骤——这样我只能加载数据文件的样本。我尝试为不想返回的行返回null,但问题是该方法在返回第一个null元组后终止 有人知道这样做的方法吗?我应该用另一种方法吗 提前谢谢。(假设你指的是猪……) 我建议编写一个新方法,它可以做您想要做的事情,只是不破坏getNext()方法的原始文档使用 您应该查看扩展LoadFunc的Pig类的源代码,并了解它们如何实现getNext()。例如: 从那以后,做你想做的事情应该是

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

有人知道这样做的方法吗?我应该用另一种方法吗

提前谢谢。

(假设你指的是猪……)

我建议编写一个新方法,它可以做您想要做的事情,只是不破坏
getNext()
方法的原始文档使用

您应该查看扩展
LoadFunc
的Pig类的源代码,并了解它们如何实现
getNext()
。例如:

从那以后,做你想做的事情应该是相当琐碎的

编辑以尝试提供更详细的帮助:

(以文本阅读器为例)

getNext()
方法正在从
RecordReader
读取。它通过调用
RecordReader.nextKeyValue()
前进到下一条记录来实现这一点。检查是否为真(即读取记录),如果为真,则调用
RecordReader.getCurrentValue()
检索该值

假设您只希望在
getNext()
中每五个一个作为示例:

(纠正了我的一个错误)

(假设你指的是猪……)

我建议编写一个新方法,它可以做您想要做的事情,只是不破坏
getNext()
方法的原始文档使用

您应该查看扩展
LoadFunc
的Pig类的源代码,并了解它们如何实现
getNext()
。例如:

从那以后,做你想做的事情应该是相当琐碎的

编辑以尝试提供更详细的帮助:

(以文本阅读器为例)

getNext()
方法正在从
RecordReader
读取。它通过调用
RecordReader.nextKeyValue()
前进到下一条记录来实现这一点。检查是否为真(即读取记录),如果为真,则调用
RecordReader.getCurrentValue()
检索该值

假设您只希望在
getNext()
中每五个一个作为示例:


(纠正了我的一个错误)

我以前读过这篇文章。问题是,如果您只想加载文件中记录的随机子集,我没有找到让getNext方法这样做的方法。这就是我想看看是否应该在实现逻辑的getNext方法之外寻找一个方法。@Winter-erm,你只要让它这样做就行了。如果要使用一次返回一个的方法,如
getNext()
,则需要跟踪已返回的方法等。如果要返回示例集,只需编写一个方法即可。类似于
public Tuple[]returnSampleSet()
(或者如果您愿意,可以返回某种类型的
列表
)。请参见我上面的编辑-这就是如何获得每五个一个,一次一个,作为样本的方法。我想这正是我对Pig的新认识。如果我使用returnSampleSet的想法,它是否能够扩展LoadFunc,或者我必须先加载所有元组,然后在单独调用Pig脚本时通过returnSampleSet函数运行它们?好的,我明白你的意思了。谢谢你的代码注释-这很有帮助。我以前读过这篇文章。问题是,如果您只想加载文件中记录的随机子集,我没有找到让getNext方法这样做的方法。这就是我想看看是否应该在实现逻辑的getNext方法之外寻找一个方法。@Winter-erm,你只要让它这样做就行了。如果要使用一次返回一个的方法,如
getNext()
,则需要跟踪已返回的方法等。如果要返回示例集,只需编写一个方法即可。类似于
public Tuple[]returnSampleSet()
(或者如果您愿意,可以返回某种类型的
列表
)。请参见我上面的编辑-这就是如何获得每五个一个,一次一个,作为样本的方法。我想这正是我对Pig的新认识。如果我使用returnSampleSet的想法,它是否能够扩展LoadFunc,或者我必须先加载所有元组,然后在单独调用Pig脚本时通过returnSampleSet函数运行它们?好的,我明白你的意思了。谢谢你的代码注释-这很有帮助。
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;