kua*_*anb 5 python pandas dask
期望:我期望,当我对给定的数据帧进行分区时,行将大致均匀地分布到每个分区中。然后我希望,当我将数据帧写入 csv 时,生成的 n 个 csvs(在本例中为 10),同样具有大致相等的长度。
现实:当我运行下面的代码时,我发现所有行都在里面export_results-0.csv,而剩下的 9 个 csv 是空的,而不是行的分布有点均匀。
问题:是否需要设置其他配置以确保行分布在所有分区中?
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()
Run Code Online (Sandbox Code Playgroud)
关于上面的代码:在下面的代码中,我创建了一个 1000 行的数据帧并将其与自身合并以创建一个 1000000 行长的数据帧(目标是最终生成一个薄而高的表,其中包含从任何一个到100k+ 列表中的任何其他几何图形)。
因此,Dask 文档的数据帧性能部分指出,两个 Dask 数据帧之间的连接可能非常昂贵。
通过将 Dask 数据帧加入到 Pandas 数据帧中,我似乎能够保留分区。下面是对上述代码的修改示例:
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')
Run Code Online (Sandbox Code Playgroud)
现在,就达到了维护分区的目的了。也就是说,我仍然有兴趣了解为什么在合并两个 Dask 数据帧时似乎无法保留分区。
| 归档时间: |
|
| 查看次数: |
1096 次 |
| 最近记录: |