基于时间的库中的水库采样?

时间:2012-10-02 09:41:38

标签: java time do-while

我已经设计了一种在java中进行水库采样的方法,我使用的代码是here

我已经放入了一个大文件,现在可以读取,在将结果输出到屏幕之前需要大约40秒才能读完,然后再次阅读。该文件太大,无法存储在内存中,只需从中选择一个随机样本。

我希望我可以在那里写一个额外的while循环来让它在我设定的时间段内放置reservoirList,而不是在它完成扫描文件之后。

类似的东西:

long startTime = System.nanoTime();
timeElapsed = 0;
while(sc.hasNext()) //avoid end of file
    do{
       long currentTime = System.nanoTime();
       timeElapsed = (int)  TimeUnit.MILLISECONDS.convert(startTime-currentTime,
               TimeUnit.NANOSECONDS);
       //sampling code goes here
    }while(timeElapsed%5000!=0)
    return reservoirList;
} return reservoirList;

但是这会产生一堆(不是我的ReservoirList的全长)行,然后输出同一行的整个流(几百?)。

有更优雅的方法吗?也许,如果可能的话,也许会有效。

1 个答案:

答案 0 :(得分:0)

我被骗了。现在我输出从文件读取的每一行X,其中X足够大,以便在每个样本之间给我一个很好的时间延迟。我使用抽样程序中的计数来确定这个时间。

do {
    //sampling which includes a count++
}while(count%5000!=0)

最后一点,我初始化为1,以阻止它输出前十行作为样本。

如果有人有更好的,基于时间的解决方案,请告诉我。