Javaでの時間ベースの貯蔵庫サンプリング?
質問
Javaで貯水池のサンプリングを行う方法を考案しました。>
私は今読んで巨大なファイルを入れて、結果を画面にしてから再び読む前にロットを読むのに約40秒かかります。ファイルはメモリに保存するには大きすぎ、その結果からランダムなサンプルを選ぶだけです。
私はそこにループを書くことができました。これを設定した期間で私の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;
.
しかし、これは線の束(私の貯留者の全長ではない)、そして同じ線の全流れ(数百?)を出力します。
これをするためのよりエレガントな方法はありますか?おそらく、可能であれば機能します。
解決
だまされました。今のところ、ファイルから読み取られたすべてのX行を出力します。ここで、Xは各サンプル間の素敵な時間遅延を与えるのに十分な大きさです。サンプリングプログラムからカウントを使用して、これがあるときに動作します。
do {
//sampling which includes a count++
}while(count%5000!=0)
.
最終的な注意、私は最初の10行をサンプルとして出力するのを止めるために1にカウントされます。
誰かがより良い、時間ベースの、解決策を持っているなら、私に知らせてください。
所属していません StackOverflow