Эффективный метод dask для чтения таблицы sql с предложением where для 5 миллионов строк - PullRequest
0 голосов
/ 28 марта 2019

У меня есть таблица с 55 миллионами строк в MSSQL, и мне нужно только 5 миллионов из этих строк, чтобы вставить в dask-фрейм данных.В настоящее время он не поддерживает запросы sql, но поддерживает операторы sqlalchemy, но есть некоторая проблема с этим, как описано здесь: Dask read_sql_table выдает ошибки при использовании выражения SQLAlchemy

Я пыталсяреализовать предложенное решение, и процесс все еще занимает около 1 минуты.

Я также попытался загрузить данные в фрейм данных pandas сразу, а затем в режим ожидания, и это занимает около 2 минут.занимает 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

Я знаю, что должен быть более эффективный способ сделать это, чего мне не хватает.

...