数据类型转换,然后重新采样

时间:2019-02-27 09:38:54

标签: bigdata dask

我在聊天室中,并将发布我的代码

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

1 个答案:

答案 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)