首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >odo函数只有关键字参数或批注

odo函数只有关键字参数或批注
EN

Stack Overflow用户
提问于 2020-09-09 00:36:00
回答 1查看 425关注 0票数 2

以下命令:

代码语言:javascript
复制
from odo import odo
odo(target='postgresql://{user}:{pass}@localhost/{server}::odo_dest_table',source='/home/username/Downloads/large_csv.csv')

生成以下错误:

代码语言:javascript
复制
  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, **kwargs)
  File "/home/username/anaconda3/envs/odosimple/lib/python3.8/site-packages/odo/into.py", line 149, in into_string_string
    return into(a, resource(b, **kwargs), **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, **kwargs)
  File "/home/username/anaconda3/envs/odosimple/lib/python3.8/site-packages/odo/into.py", line 138, in into_string
    dshape = discover(b)
  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/backends/csv.py", line 377, in discover_csv
    df = csv_to_dataframe(c, nrows=nrows, **kwargs)
  File "/home/username/anaconda3/envs/odosimple/lib/python3.8/site-packages/odo/backends/csv.py", 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环境中。

EN

回答 1

Stack Overflow用户

发布于 2020-10-21 16:05:43

很可能您的CSV文件的行数太少,无法让odo对数据类型做出合理的猜测。

https://odo.readthedocs.io/en/latest/datashape.html

odo将此文件加载到新容器(DataFrame、新的SQL Table等)时的

。它需要知道源的数据类型,以便能够创建匹配的目标。如果CSV文件很大,那么它只会查看前几百行,并从中猜测数据类型。在这种情况下,它可能会错误地猜测balance列是整数类型的,因为它直到文件中很晚的时候才看到小数值,行为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文件的结构。

我花了几个小时才发现:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63798127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档