在pyspark中将时间转换为秒

Convert time to seconds in pyspark

输入:

ID PERSONAL_AUX OUTBOUND_AUX
1 0:09:00 0:00:08
1 0:19:00 0:00:40
1 0:13:00 0:00:33
1 0:08:00 0:00:22

输出:

ID PERSONAL_AUX OUTBOUND_AUX PERSONAL_AUX_SEC OUTBOUND_AUX_SEC
1 0:09:00 0:00:08 540 8
1 0:19:00 0:00:40 1140 40

大家好,谁能帮我把时间换算成秒。我是 pyspark.TIA

的新手

如果您的模式保持一致,您可以将模式解析为单独的组件 = HH:MM:SS

最后通过将每个解析的组件转换为秒来生成所需的列

数据准备

d = {
    'ID':[1] * 4,
    'PERSONAL_AUX':['0:09:00','0:19:00','0:13:00','0:08:00'],
    'OUTBOUND_AUX':['0:00:08','0:00:40','0:00:33','0:00:22']
}

sparkDF = sql.createDataFrame(pd.DataFrame(d))

+---+------------+------------+
| ID|PERSONAL_AUX|OUTBOUND_AUX|
+---+------------+------------+
|  1|     0:09:00|     0:00:08|
|  1|     0:19:00|     0:00:40|
|  1|     0:13:00|     0:00:33|
|  1|     0:08:00|     0:00:22|
+---+------------+------------+

解析并拆分模式

sparkDF = sparkDF.withColumn('PERSONAL_AUX_HOUR',F.split(F.col('PERSONAL_AUX'),':').getItem(0).cast(IntegerType()))\
                 .withColumn('PERSONAL_AUX_MIN',F.split(F.col('PERSONAL_AUX'),':').getItem(1).cast(IntegerType()))\
                 .withColumn('PERSONAL_AUX_SEC',F.split(F.col('PERSONAL_AUX'),':').getItem(2).cast(IntegerType()))\
                 .withColumn('OUTBOUND_AUX_HOUR',F.split(F.col('OUTBOUND_AUX'),':').getItem(0).cast(IntegerType()))\
                 .withColumn('OUTBOUND_AUX_MIN',F.split(F.col('OUTBOUND_AUX'),':').getItem(1).cast(IntegerType()))\
                 .withColumn('OUTBOUND_AUX_SEC',F.split(F.col('OUTBOUND_AUX'),':').getItem(2).cast(IntegerType()))

标准化到秒

sparkDF = sparkDF.withColumn('PERSONAL_AUX_SEC',F.col('PERSONAL_AUX_HOUR')*3600 + F.col('PERSONAL_AUX_MIN')*60 + F.col('PERSONAL_AUX_SEC'))\
                 .withColumn('OUTBOUND_AUX_SEC',F.col('OUTBOUND_AUX_HOUR')*3600 + F.col('OUTBOUND_AUX_MIN')*60 + F.col('OUTBOUND_AUX_SEC'))\

sparkDF = sparkDF.drop(*['PERSONAL_AUX_HOUR','PERSONAL_AUX_MIN','OUTBOUND_AUX_HOUR','OUTBOUND_AUX_MIN'])
                             
sparkDF.show()

+---+------------+------------+----------------+----------------+
| ID|PERSONAL_AUX|OUTBOUND_AUX|PERSONAL_AUX_SEC|OUTBOUND_AUX_SEC|
+---+------------+------------+----------------+----------------+
|  1|     0:09:00|     0:00:08|             540|               8|
|  1|     0:19:00|     0:00:40|            1140|              40|
|  1|     0:13:00|     0:00:33|             780|              33|
|  1|     0:08:00|     0:00:22|             480|              22|
+---+------------+------------+----------------+----------------+

您可以使用unix_timestamp函数将时间转换为秒

from pyspark.sql import functions as F

df = input \
  .withColumn("Personal_aux_sec", F.unix_timestamp(F.col("PERSONAL_AUX"), 'H:mm:ss')) \
  .withColumn("outbound_aux_sec", F.unix_timestamp(F.col("OUTBOUND_AUX"), 'H:mm:ss'))