在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'))
输入:
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'))