首页 > 解决方案 > 当其中一些在 pyspark 中为空时发现时间戳的差异

问题描述

我在 pyspark 数据框中有两个时间戳列,如下所示:

+--------------------+--------------------+
|          TIME_STAMP|         TIME_STAMP2|
+--------------------+--------------------+
|2020-01-03 12:58:...|                null|
|2020-01-03 12:59:...|                null|
|2020-01-03 13:01:...|                null|
|2020-01-03 13:02:...|                null|
|2020-01-03 13:04:...|                null|
|2020-01-03 13:05:...|                null|
|2020-01-03 13:07:...|                null|
|2020-01-03 13:08:...|2020-01-03 12:58:...|
|2020-01-03 13:10:...|2020-01-03 12:59:...|
|2020-01-03 13:11:...|2020-01-03 13:01:...|
|2020-01-03 13:13:...|2020-01-03 13:02:...|
|2020-01-03 13:14:...|2020-01-03 13:04:...|
|2020-01-03 13:16:...|2020-01-03 13:05:...|
|2020-01-03 13:17:...|2020-01-03 13:07:...|
|2020-01-03 13:19:...|2020-01-03 13:08:...|
|2020-01-03 13:20:...|2020-01-03 13:10:...|
|2020-01-03 13:22:...|2020-01-03 13:11:...|
|2020-01-03 13:23:...|2020-01-03 13:13:...|
|2020-01-03 13:24:...|2020-01-03 13:14:...|
|2020-01-03 13:26:...|2020-01-03 13:16:...|
+--------------------+--------------------+

我想找出区别,但是,如果其中一个值是null,我会收到错误消息。有没有办法绕过这个?这是我得到的错误:

遇到错误:“由于数据类型不匹配,无法解析'( TIME_STAMP- )':'( - )' 需要(数字或日历间隔)类型,而不是时间戳;;TIME_STAMP2TIME_STAMPTIME_STAMP2

标签: pysparktimestamp

解决方案


您可以将时间戳值转换为 long 并减去它们。您将在几秒钟内获得差异:

    from pyspark.sql import functions as f

    df.withColumn('diff_in_seconds', f.col('TIME_STAMP').cast('long') - f.col('TIME_STAMP2').cast('long'))
    df.show(10, False)

请注意,如果任何值为“null”,则结果也将为“null”。


推荐阅读