質問

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にカウントされます。

誰かがより良い、時間ベースの、解決策を持っているなら、私に知らせてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top