我在MSSQL中有一个5500万行的表,而我只需要其中500万行就可以放入一个简单的数据帧。当前,它不支持sql查询,但支持sqlalchemy语句,但是此处描述存在一些问题:Dask read_sql_table errors out when using an SQLAlchemy expression
我尝试实施建议的解决方案,但该过程仍然需要1分钟左右。
我还尝试将数据一次全部加载到pandas数据框中,然后进行整理,这大约需要2分钟。
以公认的快速方式加载约450万行表需要15秒。
generator = pd.read_sql(sql=query, con=uri,chunksize=50000)
dds = []
for chunk in generator:
dds.append(dask.delayed(dd.from_pandas)(chunk, npartitions=5))
ddf = dd.from_delayed(dds)
CPU times: user 50.1 s, sys: 2.13 s, total: 52.2 s
Wall time: 52.3 s
result = engine.execute(query)
df = pd.DataFrame(result.fetchall())
df.columns = result.keys()
ddf = dd.from_pandas(df,npartitions=10)
CPU times: user 54.3 s, sys: 3.14 s, total: 57.4 s
Wall time: 2min 41s
ddf = dd.read_sql_table(table="4.5mil_table",
uri=uri, index_col='ID')
CPU times: user 117 ms, sys: 4.12 ms, total: 122 ms
Wall time: 16 s
我知道必须有一种更有效的方法来做到这一点,这是我所缺少的。