当我将字符串中的TimeStamp值转换为spark中的TimeStamp类型时,我看到了一些我不明白的东西。 我使用的Spark版本是2.11
这是代码。
val t = sc.parallelize(Array("2018-02-16T12:46:29.336+00:00")).toDF("t")
t.select(t.col("t").cast(TimestampType).as("t")).show(false)
,结果是。
+-----------------------+
|t |
+-----------------------+
|2018-02-16 13:46:29.336|
让我感到困惑的是,即使时区是+00:00,小时从12变为13。
当我将时区更改为+01:00时,如下所示
val t = sc.parallelize(Array("2018-02-16T12:46:29.336+01:00")).toDF("t")
t.select(t.col("t").cast(TimestampType).as("t")).show(false)
结果现在。小时值没有变化。 t:org.apache.spark.sql.DataFrame = [t:string]
+-----------------------+
|t |
+-----------------------+
|2018-02-16 12:46:29.336|
+-----------------------+
我在笔记本电脑上本地运行spark,时区为UTC + 1。 cast函数是否根据机器时区自动转换时区?如果是,如何避免这种情况?
有人可以帮助我吗?