2017-10-07 66 views
2

我試圖在使用Dask和read_text的json文件上運行一系列操作,但是當我檢查Linux系統監視器時,只有一個內核在100%時使用過。我如何知道我在Dask Bag上執行的操作是否可以並行化?下面是我在做什麼的基本佈局:並行Python Dask Running Bag操作

import dask.bag as db 
import json 

js = db.read_text('path/to/json').map(json.loads).filter(lambda d: d['field'] == 'value') 
result = js.pluck('field') 
result = result.map(cleantext, tbl=tbl).str.lower().remove(exclusion).str.split() 
result.map(stopwords,stop=stop).compute() 

的基本前提是從JSON文件中提取文本輸入,然後執行一些清潔工作。這似乎是可以並行化的東西,因爲每個文本都可以交給處理器,因爲每個文本和每個文本的清理都獨立於其他任何文本。這是一個不正確的想法嗎?有什麼我應該做的不同?

謝謝。

回答

2

read_text函數根據字節範圍將文件分解爲塊。我的猜測是你的文件足夠小以適合一個塊。您可以通過查看.npartitions屬性進行檢查。

>>> js.npartitions 
1 

如果是這樣,那麼你可以考慮減少塊大小來增加分區

>>> js = db.read_text(..., blocksize=1e6)... # 1MB chunks 
+0

給這名男子獎牌的數量!看起來就是這樣。當我做出改變時,所有處理器開始啓動!我原以爲這是這樣的,因爲對於Dask中的其他數據結構,人們說檢查npartitions,但是這不是基於read_text的文檔的setable,但設置塊大小是有意義的。謝謝! – Billiam

+0

您也可以使用'repartition'方法,但這不像早期使用'read_text'那樣高效。 – MRocklin