gpt4 book ai didi

mysql - PySpark,使用 JDBC 写入 MySQL 时的列顺序

转载 作者:行者123 更新时间:2023-11-29 05:14:17 25 4
gpt4 key购买 nike

我在理解 spark 和将数据帧写入 mysql 数据库方面遇到了一些困难。我有以下代码:

forecastDict = {'uuid': u'8df34d5a-ce02-4d02-b282-e10363690122', 'created_at': datetime.datetime(2014, 12, 31, 23, 0)}
forecastFrame = sqlContext.createDataFrame([forecastDict])
forecastFrame.write.jdbc(url="jdbc:mysql://example.com/example_db?user=bla&password=blabal123", table="example_table", mode="append")

代码的最后一行抛出以下错误:

Incorrect datetime value: '8df34d5a-ce02-4d02-b282-e10363690122' for column 'created_at' at row 1

如有必要,我可以发布整个堆栈跟踪,但基本上这里发生的是 pysparkuuid 字段映射到 mysql 中的错误列。这是 mysql 定义:

mysql> show create table example_table;
...
CREATE TABLE `example_table` (
`uuid` varchar(36) NOT NULL,
`created_at` datetime NOT NULL,
PRIMARY KEY (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
...

如果我们将 mysql 定义更改为以下内容(注意只有列的顺序不同):

CREATE TABLE `example_table` (
`created_at` datetime NOT NULL,
`uuid` varchar(36) NOT NULL,
PRIMARY KEY (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

插入工作正常。有没有一种方法可以在不依赖于列顺序的情况下实现这一点,或者将数据从 spark 保存到外部关系数据库的首选方法是什么?

谢谢!

--克里斯

最佳答案

我会简单地在写入时强制执行预期的顺序:

url = ...
table = ...

columns = (sqlContext.read.format('jdbc')
.options(url=url, dbtable=table)
.load()
.columns())

forecastFrame.select(*columns).write.jdbc(url=url, dbtable=table, mode='append')

在字典上使用模式推断时也要小心。这不仅已被弃用,而且相当不稳定。

关于mysql - PySpark,使用 JDBC 写入 MySQL 时的列顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35313077/

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