5

我正在尝试使用 odo 将 CSV 导入 MySQL,但出现数据形状错误。

我的理解是 datashape 采用以下格式:

var * {
    column: type
    ... 
}

其中 var 表示可变数量的行。我收到以下错误:

AssertionError: datashape must be Record type, got 0 * {
  tod: ?string,
  interval: ?string,
  iops: float64,
  mb_per_sec: float64
}

我不确定 0 行数来自哪里。我已经尝试使用 明确设置数据形状dshape(),但继续得到相同的错误。

这是重新创建错误的代码的精简版本:

from odo import odo

odo('test.csv', mysql_database_uri)

我正在使用 Conda 运行 Ubuntu 16.04 和 Python 3.6.1。

感谢您的任何意见。

4

3 回答 3

1

我有这个错误,需要指定表

# error
odo('data.csv', 'postgresql://usr:pwd@ip/db')

# works
odo('data.csv', 'postgresql://usr:pwd@ip/db::table')
于 2017-10-02T21:03:29.653 回答
0

尝试更换

odo('test.csv', mysql_database_uri) 

odo(pandas.read_csv('test.csv') , mysql_database_uri)
于 2017-07-18T17:05:24.127 回答
0

Odo 似乎有问题并已停产。作为替代方案,您可以使用具有快速 pandas 到 SQL 功能的d6tstack ,因为它使用本机 DB 导入命令。它支持 Postgres、MYSQL 和 MS SQL,

cfg_uri_mysql = 'mysql+mysqlconnector://testusr:testpwd@localhost/testdb'
d6tstack.combine_csv.CombinerCSV(glob.glob('*.csv'), 
    apply_after_read=apply_fun).to_mysql_combine(uri_psql, 'table')

对于在写入数据库之前导入多个带有数据架构更改的 CSV 和/或使用 pandas 进行预处理也特别有用,请参阅示例笔记本中的进一步内容

于 2019-02-12T15:53:42.877 回答