为什么spark会为unix_timestamp函数返回不同的值?

时间:2017-09-15 13:59:49

标签: apache-spark hive amazon-emr

我的一个Hive表中有一个列为String格式的列。将该表加载到Spark后,我使用unix_timestamp()函数将这些日期转换为unix时间戳格式。当我在不同的Spark环境中使用它时,我得到相同日期和相同日期格式的不同值。

以下是行2017-08-04 03:26:51.756658之一的样本日期,传递给unix_timestamp()函数的日期格式为yyyy-MM-dd HH:mm:ss.SSSSSS

使用的实际命令如下:

val baseWithUnixTime = base.withColumn("ZZOTIMSTP", 
$"ZZOTIMSTP".cast(TimestampType))
.withColumn("ZZOTIMSTP", $"ZZOTIMSTP".cast(TimestampType))
.withColumn("unix_time", unix_timestamp($"ZZOTIMSTP", "yyyy-MM-dd HH:mm:ss.SSSSSS"))

当我在本地Spark中执行上述命令时,对于此2017-08-04 03:26:51.756658值,我得到1501813611作为unix时间戳。 当我在EMR Spark集群中执行相同的命令时,我得到1501817211值。

如果我使用select unix_timestamp("2017-08-04 03:26:51.756658", "yyyy-MM-dd HH:mm:ss.SSSSSS");命令在Hive中尝试相同的操作,我会得到1501817967这个值。

总结一下,环境明智的结果如下:

+---------------------------+-----------+
| local Spark (version 2.2) | 1501813611|
+---------------------------|-----------+
| Spark in EMR (version 2.1)| 1501817211|
+---------------------------|-----------+
| Hive                      | 1501817967|
+---------------------------|-----------+

我想知道哪个给了我真正的价值?为什么Hive和Spark为相同的函数和相同的值集赋予不同的值?

0 个答案:

没有答案