gpt4 book ai didi

python - dask read_sql从MYSQL查询时出错

转载 作者:行者123 更新时间:2023-11-29 06:50:51 25 4
gpt4 key购买 nike

我正在使用 python 2.7 和 dask 并尝试将数据库表从远程计算机查询到 dask 数据框

我在表中有一个多列索引,我尝试使用以下脚本读取它

ddf = dd.read_sql_table("table name", "mysql://user:pass@ip:port/Dbname",spesific column name).head()

并出现以下错误

start = asanyarray(start) * 1.0 TypeError: ufunc 'multiply' did not contain a loop with signature matching types dtype('S32')

dtype('S32') dtype('S32')

我得到了 sqlalchemy uri,如所解释的 here

我不确定问题是什么,当我尝试按另一列作为索引进行查询并且仅使用 ddf head() 时,我不会收到错误,并且当我尝试计算整个 ddf 时我得到同样的错误,我认为这是一个关于列不具有唯一值的问题,我没有单列索引,而是多列,这里读取整个表的解决方案是什么?

谢谢。

完整的回溯

> Traceback (most recent call last):   File "path", line 28, in <module>
> ddf = dd.read_sql_table("tablename", "mysql://user:pass@ip:port/dbname","indexcolumn") File "file", line
> 123, in read_sql_table
> divisions = np.linspace(mini, maxi, npartitions + 1).tolist() File
> "/home/user/.local/lib/python2.7/site-packages/numpy/core/function_base.py",
> line 108, in linspace
> start = asanyarray(start) * 1.0 TypeError: ufunc 'multiply' did not contain a loop with signature matching types dtype('S32')
> dtype('S32') dtype('S32')

最佳答案

对于您没有提供更多信息或仅指定分区数量的情况,read_sql_table 中的分区逻辑仅适用于数字,因为我们需要一种方法来在最小值和最大值之间进行有序划分值。

显然,但是查询(获取最大值/最小值)在这种情况下返回一个字符串。 read_sql_table 仍然可以工作,但是您需要自己定义要拆分的分区,并为它们提供 Divisions 关键字,例如,

ddf = dd.read_sql_table("table name", "mysql://user:pass@ip:port/Dbname", 
'index_col', divisions=['aardvark', 'llama', 'tapir', 'zebra']).head()

或者,有问题的字符串肯定看起来像一个数字,因此您可能需要更新表的架构以确保它被解释为数字。

关于python - dask read_sql从MYSQL查询时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47573519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com