1
我正在努力理解spark並將數據框寫入mysql數據庫。我有以下代碼:PySpark,使用JDBC寫入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
如果必要的話,我可以張貼整個堆棧跟蹤,但基本上這裏發生了什麼就是pyspark
正在將uuid
字段映射到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;
插入正常工作。有沒有一種方法來實現這一點,而不依賴於列的順序,或者什麼是從火花保存數據到外部關係數據庫的首選方式?
謝謝!
--Chris