我正在使用spark框架从Apache凤凰表中提取数据。
查询:
"(select EVENT_TIME FROM TRADING_EVENTS WHERE EVENT_TIME >= TO_TIMESTAMP('2021-09-14 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS', 'GMT+2') and EVENT_TIM <= TO_TIMESTAMP('2021-09-14 23:59:59.999', 'yyyy-MM-dd HH:mm:ss.SSS', 'GMT+2')"守则:
DataFrame result =
sqlContext.read().format("org.apache.phoenix.spark").jdbc(zkUrl, sql, new Properties()));
result.show(100);查询本身执行,我有结果,但我注意到有些时间戳的格式化方式不同:
2021-09-14 00:00:00.004
2021-09-14 00:00:00.004
2021-09-14 00:00:00.005
2021-09-14 00:00:00.006
2021-09-14 00:00:00.006
2021-09-14 00:00:00.008
2021-09-14 00:00:00.008
2021-09-14 00:00:00.009
2021-09-14 00:00:00.009
2021-09-14 00:00:00.01
2021-09-14 00:00:00.01
-> 2021-09-14 00:00:00.10
2021-09-14 00:00:00.014
-> 2021-09-14 00:00:00.02
2021-09-14 00:00:00.02
-> 2021-09-14 00:00:00.0
2021-09-14 00:00:00.028首先,我认为这是因为火花不会在毫秒内显示剩余的0,但即使假设这一点,我也有一些非常不一致的结果,例如:
00:00:00.10
有什么办法可以让我的工作不这样做吗?另外,当我直接从菲尼克斯数据库显示行时,所有的行都会被正确地格式化。
发布于 2021-10-29 14:14:09
当您将时间戳转换为时间戳时,数据库中的日期将转换为时间戳的内部火花表示形式,当您执行show时,它将执行某种类型的默认toString函数。
为了呈现一个均匀填充的字符串,我建议你做如下的事情:
df.withColumn("formatted_timestamp", date_format(col('timestamp'),'yyyy-MM-dd HH:mm:ss.SSS'))它会在你的时间戳上印上零。
https://stackoverflow.com/questions/69709905
复制相似问题