2016-08-22 3 views
3

私はそれをロードするために私が火を使用した〜7400000行を持っているデータテーブルがあります。Blazeパッケージで特定の行を効率的に見つける方法はありますか?

from blaze import CSV, data 
csv = CSV('train.csv') 
t = data(csv) 

これはフィールドこれらを持っている:これは、このような大きいデータフレーム、特定の基準に適合するどうすれば効率的に出力列であるので、A、B、C、D、E、F、G

か?たとえば、A == 4、B == 8、E == 10の行が必要です。ルックアップをマルチタスクする方法はありますか?たとえば、スレッディングや並列プログラミングなどでは?

たとえば、あるスレッドが行1から行100000までの一致する行を見つけようとし、2番目のスレッドが行100001から200000まで一致する行を見つけようとします。 。

+0

あなたがhttp://stackoverflow.com/questions/27505764/pydata-blaze-does見てきました-it-allow-parallel-processing-or-not私は火災を知らないが、ここの答えはあなたが望む方向を指しているようだ – saulspatz

答えて

1

あなたの選択基準は非常に簡単です:

例として容易に入手できる irisサンプルデータセットを使用して
t[(t.A == 4) & (t.B == 8) & (t.E == 10)] 

from blaze import data 
from blaze.utils import example 
iris = data(example('iris.csv')) 

iris[(iris.sepal_length == 7) & (iris.petal_length > 2)] 
    sepal_length sepal_width petal_length petal_width   species 
50    7   3.2   4.7   1.4 Iris-versicolor 

ドキュメントはBlazeでparallel processingについて議論しています。

非シリアル形式で簡単に分割できるデータセットでのみ並列化できることに注意してください。特に、1つのCSVファイルで計算を並列化することはできません。 CSVファイルとHDF5やBColzのようなバイナリストレージシステムのコレクションはすべてマルチプロセッシングをサポートしています。マルチプロセッシングを使用する際にタイミングが1つのCSVファイルにほぼ同じであることを示す

import multiprocessing 
pool = multiprocessing.Pool(4) 

%timeit -n 1000 compute(iris[(iris.sepal_length > 7) & (iris.petal_length > 2)], 
         map=pool.map) 
1000 loops, best of 1: 12.1 ms per loop 

%timeit -n 1000 compute(iris[(iris.sepal_length > 7) & (iris.petal_length > 2)]) 
1000 loops, best of 1: 11.7 ms per loop 
関連する問題