以下命令:
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, **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环境中。
发布于 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文件的结构。
我花了几个小时才发现:
https://stackoverflow.com/questions/63798127
复制相似问题