如何解决odo Function仅具有关键字参数或注释
以下命令:
from odo import odo
odo(target='postgresql://{user}:{pass}@localhost/{server}::odo_dest_table',source='/home/username/Downloads/large_csv.csv')
产生以下错误:
File "/home/username/anaconda3/envs/odosimple/lib/python3.8/site-packages/odo/odo.py",line 91,in odo
return into(target,source,**kwargs)
File "/home/username/anaconda3/envs/odosimple/lib/python3.8/site-packages/multipledispatch/dispatcher.py",line 278,in __call__
return func(*args,**kwargs)
File "/home/username/anaconda3/envs/odosimple/lib/python3.8/site-packages/odo/into.py",line 43,in wrapped
return f(*args,line 149,in into_string_string
return into(a,resource(b,**kwargs),line 138,in into_string
dshape = discover(b)
File "/home/username/anaconda3/envs/odosimple/lib/python3.8/site-packages/multipledispatch/dispatcher.py",**kwargs)
File "/home/username/anaconda3/envs/odosimple/lib/python3.8/site-packages/odo/backends/csv.py",line 377,in discover_csv
df = csv_to_dataframe(c,nrows=nrows,line 295,in csv_to_dataframe
return _csv_to_dataframe(c,dshape=dshape,chunksize=chunksize,File "/home/username/anaconda3/envs/odosimple/lib/python3.8/site-packages/odo/backends/csv.py",line 346,in _csv_to_dataframe
kwargs = keyfilter(keywords(pd.read_csv).__contains__,kwargs)
File "/home/username/anaconda3/envs/odosimple/lib/python3.8/site-packages/odo/utils.py",line 130,in keywords
return inspect.getargspec(func).args
File "/home/username/anaconda3/envs/odosimple/lib/python3.8/inspect.py",line 1083,in getargspec
raise ValueError("Function has keyword-only parameters or annotations"
ValueError: Function has keyword-only parameters or annotations,use inspect.signature() API which can support them
Process finished with exit code 1
我使用pip(git clone
-> pip install .
)从git存储库安装到conda env中。
解决方法
您的CSV文件中的行可能太少,以至于odo无法对数据类型做出有根据的猜测。
https://odo.readthedocs.io/en/latest/datashape.html:
当odo将此文件加载到新容器(DataFrame,新SQL表等)中时,它需要知道源的数据类型,以便它可以创建匹配的目标。如果CSV文件很大,那么它将仅查找前几百行,并从中猜测一个数据类型。在这种情况下,它可能会错误地猜想余额列是整数类型,因为直到文件Zelda,100.25行中的很晚才显示十进制值。这将导致odo用错误的数据类型创建目标,从而破坏传输。
尝试提供dshape
关键字。例如,如果您的表有两列类型为varchar和bigint的列,则
odo(target='postgresql://{user}:{pass}@localhost/{server}::odo_dest_table',source='/home/username/Downloads/large_csv.csv',dshape='var * {a: string,b: int64}')
表和CSV中的列数必须相同且匹配,因此您可能必须在创建表时牢记CSV文件的结构。
花了我几个小时做出发现:P
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。