Spark读取包含纳秒级时间戳的csv

时间:2019-09-20 00:46:51

标签: postgresql csv apache-spark pyspark

我正在使用输出到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。

感谢您的帮助!

0 个答案:

没有答案