1

我从 CSV 文件中获取数据,并在我的 Dask 数据框中保存和操作。从那里我需要将数据写入数据表。我还没有真正遇到过任何解决方案。Pandas 的 to_sql 函数为此提供了内置功能,所以我不确定是否需要先转换为 Pandas?我目前认为将 Dask 数据帧转换为 Pandas 会导致它完全加载到内存中,这可能会破坏首先使用 Dask 的目的。

将 Dask 数据帧写入数据表的最佳和最快方法是什么?

4

3 回答 3

2

假设你有 dask 数据框作为 df,你只需要这个:

df.to_sql(table, schema=schema, uri=conn_str, if_exists="append", index=False)

我发现这很容易成为 dask 数据帧的最快方法。

于 2020-11-02T10:15:22.723 回答
0

我对@kfk 的回答没有任何问题,因为我也对此进行了调查,但我的解决方案如下。

我将 DASK 数据帧放到 csv 中,然后使用 Golang 应用程序从那里拾取 CSV,该应用程序使用多线程将数据推送到 Mongo。对于 450 万行,速度从使用“加载本地 infile”的 38 分钟变为使用多线程应用程序的 2 分钟。

于 2020-04-09T14:15:14.557 回答
-1

pandas.to_sql()不是将数据加载到数据库中的最快方法。使用比内置批量加载方法to_sql()很多的 ODBC 驱动程序连接。

您可以像这样从 MySQL 中的 csv 文件加载数据:

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.

于 2020-03-28T09:21:52.393 回答