也有类似的问题,但我开始认为我的问题与sparkjdbcapis有关,因为这两个组件本身似乎工作正常。我使用的是spark2.4(它支持ms时间戳),mysql 5.7.x版本支持分秒。
我创建了一个简单的数据集,其中有一个timestamptype列,当我显示()它时,得到的结果如下:
+-----------------------+
|my_timestamp |
+-----------------------+
|2021-02-06 12:11:45.335|
+-----------------------+
当我将其写入mysql(使用dataset.write())时,它会自动创建表,列的时间戳类型为sql,毫秒部分在插入时丢失。
对于第二个测试,我手动创建了表,并将冒号定义为timestamp(3)。当我手动插入带有ms part的时间戳时,一切正常。但是当我使用sparkjdbcapis编写时,ms部分再次被截断,变成 2021-02-06 12:11:45.0.
唯一想到的解决方法是将列保留为long/bigint,并在查询时将其转换为datetime/timestamp。
我做错什么了吗?
1条答案
按热度按时间5vf7fwbs1#
好吧,我来救你。显然,如果我将spark列保留为字符串,并按照mysql期望的格式设置值,例如“2020-11-20 23:06:41.745”,我就可以插入mysql timestamp(3)列,而不会出现任何截断或其他问题。
这感觉更像是一种变通方法,所以我仍然想知道是否有一种方法可以正确地做到这一点。