Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用map_分区和pd.df.to_sql从dask数据帧创建sql表_Python_Postgresql_Pandas_Dask_Pandas To Sql - Fatal编程技术网

Python 使用map_分区和pd.df.to_sql从dask数据帧创建sql表

Python 使用map_分区和pd.df.to_sql从dask数据帧创建sql表,python,postgresql,pandas,dask,pandas-to-sql,Python,Postgresql,Pandas,Dask,Pandas To Sql,Dask没有像pandas那样的df.to_sql(),因此我尝试复制该功能,并使用map_partitions方法创建一个sql表。这是我的密码: import dask.dataframe as dd import pandas as pd import sqlalchemy_utils as sqla_utils db_url = 'my_db_url_connection' conn = sqla.create_engine(db_url) ddf = dd.read_csv('da

Dask没有像pandas那样的df.to_sql(),因此我尝试复制该功能,并使用
map_partitions
方法创建一个sql表。这是我的密码:

import dask.dataframe as dd
import pandas as pd
import sqlalchemy_utils as sqla_utils

db_url = 'my_db_url_connection'
conn = sqla.create_engine(db_url)

ddf = dd.read_csv('data/prod.csv')
meta=dict(ddf.dtypes)
ddf.map_partitions(lambda df: df.to_sql('table_name', db_url, if_exists='append',index=True), ddf, meta=meta)
这将返回我的dask dataframe对象,但当我查看我的psql服务器时,没有新的表。。。这里出了什么问题

更新
仍然无法使其工作,但由于独立问题。后续问题:

简单地说,您已经创建了一个数据框架,它是要完成的工作的处方,但您尚未执行它。要执行,需要对结果调用
.compute()

请注意,这里的输出实际上不是一个数据帧,每个分区的计算结果都是
None
(因为
to_sql
没有输出),因此用
df.to_delayed
表示可能更为简洁,例如

dto_sql = dask.delayed(pd.DataFrame.to_sql)
out = [dto_sql(d, 'table_name', db_url, if_exists='append', index=True)
       for d in ddf.to_delayed()]
dask.compute(*out)

还要注意,是否获得良好的并行性将取决于数据库驱动程序和数据系统本身。

更新:Dask
to_sql()
现在可用

谢谢你!你的最后一句话很有道理。你知道postgresql是否支持并行性吗?这样做有任何意义吗?或者只调用ddf.compute()到_sql(…)更好?我本来希望dask能加快速度,因为转换为sql的速度非常慢,但现在我发现这可能是不可能的。后续问题您的回答没有提供任何新的解决方案。你应该考虑把你的答案作为对被接受的答案的评论。