我的数据湖中有一个 csv 文件 presence.csv :
TIME,RESULT,PARENTLOCALIZATIONCODE,PARENTNAME,SIGFOXID,STATUS
2018-12-10T00:06:14.5464070Z,OK,A,A,19A9BC,OFF_PERIOD
我试图阅读它,但 TIME 列输出错误:
data = sqlContext.read.csv(
'presence.csv',
header='true',
inferSchema= 'true',
sep=","
)
data.show(truncate=False)
+----------------------+------+----------------------+----------+--------+----------+
|TIME |RESULT|PARENTLOCALIZATIONCODE|PARENTNAME|SIGFOXID|STATUS |
+----------------------+------+----------------------+----------+--------+----------+
|2018-12-10 01:37:18.07|OK |A |A |19A9BC |OFF_PERIOD|
+----------------------+------+----------------------+----------+--------+----------+
我首先想到我的服务器和 gmt 时间之间的时间差,但一个是 00:06:14 另一个是 01:37:18 所以关于 01:31 的差异很奇怪。
你知道为什么会发生这种转变吗?
请您参考如下方法:
来自 pyspark.sql.DataFrameReader.csv 的文档,默认的 timestampFormat 是:
yyyy-MM-dd'T'HH:mm:ss.SSSXXX适用于 spark 2.2 及以上版本yyyy-MM-dd'T'HH:mm:ss.SSSZZspark version 2.1Nonefor spark version 2.0 which means trying to parse times and date byjava.sql.Timestamp.valueOf()andjava.sql.Date.valueOf()
您的数据的主要问题是您在几分之一秒内有 3 个额外值。因此,对于此数据,您需要使用 timestampFormat="yyyy-MM-dd'T'hh:mm:ss:SSSSSSZZ"
data = spark.read.csv(
'presence.csv',
header='true',
inferSchema= 'true',
sep=",",
timestampFormat="yyyy-MM-dd'T'hh:mm:ss:SSSSSSZZ"
)
data.show(truncate=False)
#+-----------------------+------+----------------------+----------+--------+----------+
#|TIME |RESULT|PARENTLOCALIZATIONCODE|PARENTNAME|SIGFOXID|STATUS |
#+-----------------------+------+----------------------+----------+--------+----------+
#|2018-12-09 19:06:14.546|OK |A |A |19A9BC |OFF_PERIOD|
#+-----------------------+------+----------------------+----------+--------+----------+
但是正如您在这里看到的,TIME 列正在转换为本地时间(在我的系统上是 GMT-4)。
如果这不是您想要的,“修复”取决于您的 spark 版本并且在 Spark Strutured Streaming automatically converts timestamp to local time 上的答案中有详细说明。 .
如果您应用特定于版本的“修复”,您会看到以下结果:
df.show(truncate=False)
#+-----------------------+------+----------------------+----------+--------+----------+
#|TIME |RESULT|PARENTLOCALIZATIONCODE|PARENTNAME|SIGFOXID|STATUS |
#+-----------------------+------+----------------------+----------+--------+----------+
#|2018-12-10 00:06:14.546|OK |A |A |19A9BC |OFF_PERIOD|
#+-----------------------+------+----------------------+----------+--------+----------+
引用资料:
