2016-02-19 105 views
4

我有一個json文件的目錄,我試圖將其轉換爲dask DataFrame並將其保存爲castra。 在它們之間有200個包含O(10 ** 7)json記錄的文件。 代碼非常簡單,主要遵循教程示例。dask計算不是並行執行

import dask.dataframe as dd 
import dask.bag as db 
import json 
txt = db.from_filenames('part-*.json') 
js = txt.map(json.loads) 
df = js.to_dataframe() 
cs=df.to_castra("data.castra") 

我在32核心機器上運行它,但代碼只使用100%的一個內核。 我從文檔中瞭解到,這段代碼是並行執行的。 爲什麼不是? 我誤解了一些東西嗎?

回答

4

您的最終集合是一個dask數據框,默認使用線程,您必須明確告訴dask使用進程。

爲此,您可以在全球範圍

import dask 
import dask.multiprocessing 
dask.set_options(get=dask.multiprocessing.get) 

還是這樣做只是在to_castra呼叫

df.to_castra("data.castra", get=dask.multiprocessing.get) 

而且,就像一個警告,古羅馬兵營主要是一個實驗。它速度非常快,但也不像HDF5那樣成熟。

+0

謝謝,但它沒有爲我工作,'df.to_castra'不採取'get'和'dask.set_options'方法似乎沒有任何效果。我明白Castra是實驗性的,但它似乎很適合我很多用例。我經常有中等大小的數據,我希望能夠以快速保存和加載時間的方式用作DataFrame。火花或HDFS是ovekill和Pandas不安靜舒展那麼遠。 –

+0

哦,你說HDF5不HDFS ... –

+0

啊,是的,你確實是對的。看起來我們有意將單核調度程序硬編碼爲to_castra。我認爲這是因爲我們遇到了糟糕的內存性能問題,因爲中間結果會隨着數據準備好而累積起來,但磁盤無法跟上。不過,這應該是可選的。我已經在https://github.com/dask/dask/commit/cb4cc8127028fc736e295c114acfbeed15b71617 – MRocklin