首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spark DataFrameWriter使用时间戳而不是日期时间

问Spark DataFrameWriter使用时间戳而不是日期时间
EN

Stack Overflow用户
提问于 2019-02-21 19:28:08
回答 1查看 815关注 0票数 0

我正在将数据库从SQL Server迁移到MariaDB,但是遇到了MariaDB的时间戳范围限制的问题。

我有一个填充数据库的PySpark项目,在覆盖模式下使用DataFrameWriter.jdbc()创建表。WHen与SQL Server一起工作时,Spark将自己的时间戳数据类型转换为SQL Server的DATETIME2数据类型,这种数据类型工作得很好。但是,当使用MariaDB时,它会将其转换为MariaDB自己的时间戳,时间戳的范围是2038年。这会给所有包含大于该值的表带来麻烦。

我知道MariaDB有一个DATETIME类型,它与SQL Server的DATETIME具有相同的范围,但我找不到一种方法在创建表时强制Spark使用该数据类型。

我也不能手动创建表,因为每次脚本运行时都会重新创建它。

EN

回答 1

Stack Overflow用户

发布于 2019-07-17 23:26:26

我也面临着同样的问题,当tr没有直接使用spark.read/write和jdbc建立连接时,我使用了mysql.connection包。下面是一个例子:

代码语言:javascript
复制
!pip install mysql.connector
import mysql.connector
conn = mysql.connector.connect(host="localhost",port=3306, user="root", password="yourpassword", database="xyz")
cursor = conn.cursor()
Qry = "create table TempTableMaria (colA VARCHAR(50), startdate datetime(6), enddate datetime(6), colB VARCHAR(50));"
cursor.execute(Qry)
conn.commit()
conn.close()

您可以传递一个定制的create table查询,您可以根据需要指定列及其数据类型,并使用所需的模式创建一个空表。

一旦你完成了你的工作,如果你需要,你可以随时删除这个表。

对于其他操作,比如追加/覆盖这个表,您总是可以返回到df.write.format("jdbc")...现在写入此表时,dataframe的时间戳数据类型将存储为日期时间,如果列包含的日期为9999-12-31 00:00:00.000000,则不会出现任何问题

希望这能有所帮助!

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

https://stackoverflow.com/questions/54806011

复制
相关文章

相似问题

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