【问题标题】:How do I get a DASK dataframe into a MySQL datatable?如何将 DASK 数据帧放入 MySQL 数据表?
【发布时间】:2020-03-26 16:37:06
【问题描述】:

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

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

【问题讨论】:

标签: python dask dask-dataframe


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      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

      【讨论】:

        猜你喜欢
        • 2019-06-26
        • 1970-01-01
        • 2017-02-04
        • 1970-01-01
        • 2021-09-07
        • 2019-01-16
        • 1970-01-01
        • 1970-01-01
        • 2021-03-26
        相关资源
        最近更新 更多