求助:如何在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
相关产品推荐
相关产品推荐

