我在聊天室中,并将发布我的代码
df['DateTime']=dd.to_datetime(df['DateTime'])
df['KWH/hh (per half hour) '].astype(float)
df=df['KWH/hh (per half hour) '].fillna(0)
df=df.set_index(df['DateTime'], npartitions='auto')
df=df.resample('D').sum()
当我在原型中运行代码时,原始数据的20%花费了大约1.8分钟,但是当我处理真实数据(1.2 gB)时,时间呈指数增长(超过1小时) 我用块尝试了同样的问题,读了csv,它比生成器快得多,也更好。 我的问题是如何提高使用8核pro的性能。达斯克应该通过并行计算为我带来更好的性能吗?
编辑过的这是我的发电机:
start=time.time()
before= memory_footprint()
dataframes = (pd.read_csv(fname) for fname in filenames)
temp=(remove_unnessasey_data(df,l1) for df in dataframes)
help=(change_structure(t) for t in temp)
for i in(1,688):
dd.append(next(help))
after= memory_footprint()
du=time.time()-start
答案 0 :(得分:0)
您提到可以通过“生成器”或“块”执行此操作。这向我暗示您的时间栏已被排序。正如doc所指出的,您应该告诉Dask,这样它就不会对您的数据进行排序,这很可能是导致数据缓慢的主要原因。
另一个建议,您从三个逐行操作开始,一个接一个。您可能想尝试map_partitions
一步完成三个步骤。
def preprocess(df):
df['DateTime'] = pd.to_datetime(df['DateTime'])
df['KWH/hh (per half hour) '] = df['KWH/hh (per half hour) '].astype(float)
return df['KWH/hh (per half hour) '].fillna(0)
df = df.map_partitions(preprocess)