チャンク内のファイルから選択する場合hdf5
、結果の選択に含まれるチャンクの数を知りたいです。
入力データの行数はnrows
最大 100ml、つまりchunksize
100k ですが、ほとんどの選択ではチャンク内の行数nrows_chunk
が少ないため、where
1 つまたは複数のチャンクを選択できます。チャンクで操作を行う前と呼び出し時に、iteratorGenerator()
チャンクがいくつあるか知りたいです。直感的に、私の構文のようなものが欲しいのですlen(list(enumerate(iteratorGenerator())))
が、これは length=1 になります (一度に 1 つのチャンクしか考慮されないためだと思いますiteratorGenerator()
)。
ジェネレーターを使用する全体的なアイデアは、すべての選択を一度に実行するのではなく、チャンクごとに実行することであるため、この問題の解決策はないと思いました。しかし実際には、for
以下のループを実行すると、最初の反復には非常に長い時間がかかりますが、次の反復にはわずか数秒しかかかりません。これは、最初の反復でチャンクに関するほとんどのデータが収集されることを示唆しています。これは私には不可解であり、チャンクによる選択がどのように機能するかについての説明をいただければ幸いです。
iteratorGenerator = lambda: inputStore.select(
groupInInputStore,
where=where,
columns=columns,
iterator=True,
chunksize=args.chunksize
)
nrows = inputStore.get_storer(groupInInputStore).nrows
# if there is more than one chunk in the selection:
for i, chunk in enumerate(iteratorGenerator()):
# check the size of a chunk
nrows_chunk = len(chunk)
# do stuff with chunks, mainly groupby operations
# if there is only one chunk do other stuff
さらに、インが何chunksize
をHDFStore.select
指しているのかわかりません。私の経験から、条件を適用した後の選択されたチャンクの最大サイズですwhere
。一方、http://pandas.pydata.org/pandas-docs/stable/generated/pandas.HDFStore.select.htmlは、chunksize: nrows to include in iteration を定義しています。これは、読み取る行数のように聞こえます。から。どちらが正しい?