我正在使用输出到CSV的复制命令来转储Postgres表。
CSV包含以下格式的时间戳记:2011-01-01 12:30:10.123456+00
。
我正在阅读CSV
df = spark.read.csv(
"s3://path/to/csv",
inferSchema=True,
timestampFormat="yyyy-MM-dd HH:mm:ss.SSSSSSX",
...
)
,但这不起作用(按预期)。 timestampFormat使用java.text.SimpleDateFormat
,它不支持纳秒级。
我在timestampFormat上尝试了很多变体,它们都产生String列或格式化时间戳。似乎十亿分之一秒最终导致秒数溢出,并给我的时间戳增加了时间。
我无法将架构应用于CSV,因为我并不总是知道它,并且由于无法始终知道哪个将成为时间戳,所以无法转换列。我也无法在退出Postgres的路上添加时间戳,因为我只是在做select * ...
。
如何解决此问题,以便可以使用正确的时间戳格式提取CSV?
我的第一个想法是我只需要修改timestampFormat
,看来这不可能吗?我的第二个想法是在从Postgres转储时使用sed
截断时间戳。
我正在使用spark 2.3.1。
感谢您的帮助!