spark无法将字符串转换为时间戳

oknrviil  于 2021-06-24  发布在  Hive
关注(0)|答案(2)|浏览(340)

我有一个包含字符串列的配置单元表:这是一个示例:

| DT                            |                                                       
|-------------------------------|
| 2019-05-07 00:03:53.837000000 |

当我尝试在spark scala df中导入表,将字符串转换为时间戳时,我只有空值:

val df = spark.sql(s"""select to_timestamp(dt_maj, 'yyyy-MM-dd HH:mm:ss.SSS') from ${use_database}.pz_send_demande_diffusion""").show()

| DT   |                                                       
|------|
| null |

val df = spark.sql(s"""select dt from ${use_database}.pz_send_demande_diffusion""").show()

给出一个很好的结果(包含字符串值的列)。所以spark正常导入te柱。
我也试过:

val df = spark.sql(s"""select to_timestamp('2005-05-04 11:12:54.297', 'yyyy-MM-dd HH:mm:ss.SSS') from ${use_database}.pz_send_demande_diffusion""").show()

成功了!它返回一个timestamps列。
有什么问题?

gtlvzcf8

gtlvzcf81#

修剪多余的0。那么,

df.withColumn("new", to_timestamp($"date".substr(lit(1),length($"date") - 6), "yyyy-MM-dd HH:mm:ss.SSS")).show(false)

结果是:

+-----------------------------+-------------------+
|date                         |new                |
+-----------------------------+-------------------+
|2019-05-07 00:03:53.837000000|2019-05-07 00:03:53|
+-----------------------------+-------------------+

架构:

root
 |-- date: string (nullable = true)
 |-- new: timestamp (nullable = true)
wixjitnu

wixjitnu2#

我想你应该用下面的格式 yyyy-MM-dd HH:mm:ss.SSSSSSSSS 对于此类数据 2019-05-07 00:03:53.837000000

相关问题