如何解决使用ddf.read_sql_table时看到TypeError-dask
dask==2.27.0
python==3.8.3
Operating System== centos7
- 如果可能传递包含对
ddf.read_sql_table
的查询的sqlalchemy文本。 - 按照文档中所述将{_1}}传递给read_sql_table的参数。
代码:
TypeError
看到错误:
from sqlalchemy.sql import text
from sqlalchemy.engine import create_engine
import dask.dataframe as ddf
DIALECT = '<value>'
SQL_DRIVER= '<value>'
USERNAME= '<value>'
PASSWORD = '<value>'
HOSTNAME = '<value>'
PORT = '<value>'
SID = '<value>'
ENGINE_PATH = DIALECT + '+' + SQL_DRIVER + '://' + USERNAME + ':' + PASSWORD +'@' + HOSTNAME + ':' + str(PORT) + '/' + SID
s = text("My complicated sql query")
df = ddf.read_sql_table(s,ENGINE_PATH,index_col='id',npartitions=10)
解决方法
所以 dask 目前不直接支持文本机制中的复杂查询(从 v2021.02.0 开始)。我的解决方法如下:
- 将您的查询保存为数据库中的视图
- 构造 sqlalchemy uri 字符串(如您在问题中所做的那样)
- 初始化一个指向您的视图的“表格”对象
- 将所有内容传递给 read_sql_table 函数
请参阅下面的简单示例:
from sqlalchemy import Table,Metadata,Column,Integer
import dask.dataframe as ddf
import multiprocessing
uri = f'{dialect}://{user}:{password}@{host}:{port}/{dbName}'
view = '[NAME_OF_VIEW]'
schema = '[NAME_OF_SCHEMA]'
pkey = '[PRIMARY_KEY_COLUMN]'
myview = Table(view,Metadata(schema=schema),Column(pkey,Integer,primary_key=True))
df = ddf.read_sql_table(table=myview,uri=uri,index_col=pkey,schema=schema,npartitions=multiprocessing.cpu_count()*3)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。