You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何在PySpark中将Unix时间戳差值转换为分钟

转换Unix时间戳差值为分钟格式

没问题,这事儿很容易解决!从你的数据能看出来,calculated_time和prev_value都是13位的Unix毫秒级时间戳,所以你当前计算出的diff是毫秒数。要转换成分钟,只需要把这个差值除以1000*60(因为1分钟=60秒,1秒=1000毫秒)就行。

修改后的代码方案

你可以直接在现有的withColumn逻辑里调整差值计算部分,以下是几种常见的实现方式:

1. 保留小数的分钟数(最直观)

import pyspark.sql.functions as F

df_new = df_new.withColumn(
    "diff_minutes",
    F.when(
        F.isnull(df_new.calculated_time - df_new.prev_value),
        0.0  # 用浮点数保持格式统一
    ).otherwise(
        # 毫秒转分钟:差值 / (1000毫秒/秒 * 60秒/分钟)
        (df_new.calculated_time.cast('long') - df_new.prev_value.cast('long')) / 60000
    )
)

2. 取整为整数分钟(如果不需要小数)

如果只需要整数形式的分钟数,可以用F.floor()向下取整,或者直接转成整数类型:

df_new = df_new.withColumn(
    "diff_minutes",
    F.when(
        F.isnull(df_new.calculated_time - df_new.prev_value),
        0
    ).otherwise(
        F.floor(
            (df_new.calculated_time.cast('long') - df_new.prev_value.cast('long')) / 60000
        ).cast('int')
    )
)

3. 保留指定小数位数(比如2位)

如果需要更规整的小数格式,用F.round()控制精度:

df_new = df_new.withColumn(
    "diff_minutes",
    F.when(
        F.isnull(df_new.calculated_time - df_new.prev_value),
        0.0
    ).otherwise(
        F.round(
            (df_new.calculated_time.cast('long') - df_new.prev_value.cast('long')) / 60000,
            2  # 保留2位小数
        )
    )
)

示例效果

拿你数据里的第二行举例:原diff是620742312毫秒,转换后会得到约10345.70分钟(保留两位小数),或者10345整数分钟。

内容的提问来源于stack exchange,提问作者dsk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:31:02