Как я могу получить кадр данных DASK в MySQL данных? - PullRequest
1 голос
/ 26 марта 2020

Я получил данные из файла CSV, и они хранятся и обрабатываются в моем фрейме данных Dask. Оттуда мне нужно записать данные в таблицу данных. Я действительно не сталкивался с какими-либо решениями для этого. Pandas имеет встроенную функциональность для этого с его функцией to_ sql, поэтому я не уверен, нужно ли мне сначала конвертировать в Pandas? В настоящее время я думаю, что преобразование фрейма данных Dask в Pandas приведет к его полной загрузке в память, что в первую очередь может отрицательно сказаться на цели использования Dask.

Каков наилучший и самый быстрый подход для записи фрейма данных Dask в таблицу данных?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

У меня нет проблем с ответом @ kfk, так как я также исследовал это, но мое решение было следующим:

Я перетаскиваю кадр данных DASK в csv, и оттуда выбираю CSV с помощью * Приложение 1004 *, которое помещает данные в Mon go с использованием многопоточности. Для 4,5 миллионов строк скорость возросла с 38 минут с использованием «load local infile» до 2 минут с помощью многопоточного приложения.

0 голосов
/ 28 марта 2020

pandas.to_sql() - не самый быстрый способ загрузки данных в базу данных. to_sql() использует соединение с драйвером ODB C, что на медленнее , чем встроенный метод массовой загрузки.

Вы можете загрузить данные из файла CSV в MySQL следующим образом :

LOAD DATA INFILE 'some_file.csv'
INTO TABLE some_mysql_table
FIELDS TERMINATED BY ';'

Итак, я бы сделал следующее:

import dask.dataframe as dd
from sqlalchemy import create_engine

#1) create a csv file
df = dd.read_csv('2014-*.csv')
df.to_csv("some_file.csv")

#2) load the file
sql = """LOAD DATA INFILE 'some_file.csv' 
         INTO TABLE some_mysql_table
         FIELDS TERMINATED BY ';"""

engine = create_engine("mysql://user:password@server")
engine.execute(sql)

Вы легко можете превратить вышеприведенное в функцию и использовать ее вместо to_sql.

...