Spark Scala将Unix时间转换为时间戳失败

用户名

我在将unix时间转换为时间戳时遇到问题。

我有一个数据框,一列是PosTime。我想将其转换为Timestamp,但是它工作了一半。你能帮我吗?

scala> adsb.printSchema()
root
 |-- Icao: string (nullable = true)
 |-- Alt: long (nullable = true)
 |-- Lat: double (nullable = true)
 |-- Long: double (nullable = true)
 |-- PosTime: long (nullable = true)
 |-- Spd: double (nullable = true)
 |-- Trak: double (nullable = true)
 |-- Type: string (nullable = true)
 |-- Op: string (nullable = true)
 |-- Cou: string (nullable = true)

scala> adsb.show(50)
+------+------+---------+----------+-------------+-----+-----+----+--------------------+--------------------+
|  Icao|   Alt|      Lat|      Long|      PosTime|  Spd| Trak|Type|                  Op|                 Cou|
+------+------+---------+----------+-------------+-----+-----+----+--------------------+--------------------+
|ABECE7|  4825|40.814442| -111.9776|1506875131778|197.0|356.0|B739|     Delta Air Lines|       United States|
|4787B0| 38000|     null|      null|         null| null| null|B738|           Norwegian|              Norway|
|D3B18A|  4222|     null|      null|         null| null| null|null|                null|Unknown or unassi...|
|3C3F78|118400|     null|      null|         null| null| null|null|                null|             Germany|
|AA1C45|   -75|40.695969|-74.166321|1506875131747|157.4| 25.6|null|                null|       United States|
 scala> val adsb1 = adsb.withColumn("PosTime", $"PosTime".cast(TimestampType))

scala> adsb_sort.show(100)
+------+-------+---------+---------+--------------------+-------+-------+----+----+--------------------+
|  Icao|    Alt|      Lat|     Long|             PosTime|    Spd|   Trak|Type|  Op|                 Cou|
+------+-------+---------+---------+--------------------+-------+-------+----+----+--------------------+
|FFFFFF|   null|     null|     null|                null|   null|   null|null|null|Unknown or unassi...|
|FFFFFF|1049093|      0.0|      0.0|49800-05-04 14:39...|28672.0| 1768.7|null|null|Unknown or unassi...|
|FFFFFF|  12458|      0.0|      0.0|49800-12-11 06:39...|    0.0| 2334.4|null|null|Unknown or unassi...|
阿尔珀 图尔克

Spark解释Long为时间戳(以秒为单位),但看起来数据以毫秒为单位:

scala> spark.sql("SELECT CAST(1506875131778 / 1000 AS timestamp)").show
+-------------------------------------------------------------------------+
|CAST((CAST(1506875131778 AS DOUBLE) / CAST(1000 AS DOUBLE)) AS TIMESTAMP)|
+-------------------------------------------------------------------------+
|                                                     2017-10-01 18:25:...|
+-------------------------------------------------------------------------+

如果我是对的,请除以1000:

adsb.withColumn("PosTime", ($"PosTime" / 1000).cast(TimestampType))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spark数据框:将bigint转换为时间戳

在Spark Scala / Python中将日期动态转换为时间戳(无提及日期格式)

Spark数据帧将整数转换为时间戳并查找日期差

时间戳转换 Spark Scala

在Spark Scala中将时间戳转换为UTC

在Spark Scala中将CDT时间戳转换为UTC格式

将时间戳转换为Spark数据框中的日期

Spark Scala - 将带毫秒的时间戳转换为不带毫秒的时间戳

Spark Dataframe将列值更改为时间戳

Spark Dataframes:将unix指数数字转换为字符串整数以获得时间戳

如何使用Scala在Spark 2.1中将毫秒级字符串列转换为毫秒级时间戳?

Spark 2.3 (Scala) - 将时间戳列从 UTC 转换为另一列中指定的时区

Spark:将GMT时间戳转换为东部时间并考虑夏令时

将日期unix转换为时间戳

spark rdd时间戳转换

将 Unix 时间戳转换为时间戳,包括某个时区的本地时间

在Spark(Java)中将时间戳转换为纪元

Spark Scala DataFrame时间戳转换排序?

Spark SQL:将 JSON 格式的毫秒时间戳转换为日期格式

PLSQL-以毫秒精度将unix时间戳转换为时间戳(6)

将小时转换为时间戳

将毫秒转换为时间戳

将年份转换为时间戳

Spark DataFrame将字符串格式的毫秒时间戳列转换为以毫秒为单位的人类可读时间

SPARK - 如何将一列解析为时间戳?

将时间转换为Unix时间戳

Db2:如何将 Unix/纪元时间转换为时间戳?

在Scala / Spark中将纪元转换为日期时间

将UTC时间戳转换为时间值?