2017-06-16 85 views
3

期望分區:我會想到的是,當我分割給定數據框,行會大致平均分配到每個分區。然後我會想到的是,當我寫數據幀到CSV,產出的正的CSV(在這種情況下,10),將類似地大致相等的長度。分佈行之間的DASK數據幀

現實:當我運行下面的代碼時,我發現,而不是有點均勻分佈的行,所有行都在export_results-0.csv,其餘9個csvs是空的。

問:是否有我需要設置,以確保行分配的所有分區之間的額外配置?

from dask.distributed import Client 
import dask.dataframe as dd 
import pandas as pd 

client = Client('tcp://10.0.0.60:8786') 

df = pd.DataFrame({'geom': np.random.random(1000)}, index=np.arange(1000)) 
sd = dd.from_pandas(df, npartitions=100) 

tall = dd.merge(sd.assign(key=0), sd.assign(key=0), on='key').drop('key', axis=1) 
tall.to_csv('export_results-*.csv').compute() 

關於上面的代碼:在下面的代碼中,我創建了一個有1000行數據幀,並用自己的才能創造出百萬行長期數據框合併它(的目標是最終生成一個瘦瘦高高表保持從任何一個到100k +列表中的任何其他幾何體的距離)。

回答

2

所以,在兩個DASK dataframes之間的連接可以是非常昂貴的DASK文檔的數據框性能科的注意。

通過加入一個DASK數據幀的數據幀的熊貓,我似乎能夠保存的分區。以下是對上述代碼的修改示例:

df1 = pd.DataFrame({ 'geom': np.random.random(200) }, index=np.arange(200)) 
sd1 = dd.from_pandas(df1.copy(), npartitions=5).assign(key=0) 

tall = dd.merge(sd1, df1.assign(key=0), on='key', npartitions=10).drop('key', axis=1) 
tall.to_csv('exported_csvs/res-*.csv') 

現在,這實現了維護分區的目標。儘管如此,我仍然有興趣在理解爲什麼分區貌似不能合併兩個DASK dataframes時保留。