将另一列的分钟数添加到 pyspark 中的字符串时间列
Add minutes from another column to string time column in pyspark
我有下面的 pyspark dataframe.both 是字符串列。
time additional_time_in_mins
11:00:00 60
13:00:00 60
14:00:00 30
我必须将附加时间列中的分钟添加到实际时间,并在 pyspark 中创建如下输出。
预期输出:
new_time
12:00:00
14:00:00
14:30:00
有没有办法在 pyspark 中做到这一点
一个简单的选项是使用 unix_timestamp
函数在几秒钟内将 time
列转换为 bigint,添加分钟(分钟 * 60 秒) 然后将结果转换回 timestamp.
最后,转换为小时格式。
df = df.withColumn('new_time', F.date_format((F.unix_timestamp('time', 'HH:mm:ss') + F.col('additional_time_in_mins')*60).cast('timestamp'), 'HH:mm:ss'))
df.show()
+--------+-----------------------+--------+
| time|additional_time_in_mins|new_time|
+--------+-----------------------+--------+
|11:00:00| 60|12:00:00|
|13:00:00| 60|14:00:00|
|14:00:00| 30|14:30:00|
+--------+-----------------------+--------+
使用 UDF 执行此操作的其他方法:
from pyspark.sql.functions import date_format, col
data = [
("11:00:00", "60"),
("13:00:00", "60"),
("14:00:00", "30"),
]
df = spark.createDataFrame(data, ["time", "additional_time_in_mins"])
df.show()
UDF 逻辑求和时间
from pyspark.sql.types import StringType, IntegerType
from pyspark.sql.functions import udf
@udf(returnType=StringType())
def sum_time(var_time, additional_time):
# Converting var_time string to time
var_time = datetime.strptime(var_time, '%H:%M:%S').time()
#Using date to utitlise the time function
combined_time = (datetime.combine(date.today(), var_time) + timedelta(minutes=additional_time)).time()
return str(combined_time)
使用UDF得到最终输出:
df = df.withColumn(
"total_time", sum_time(col("time"), col("additional_time_in_mins").cast(IntegerType()))
)
display(df)
我有下面的 pyspark dataframe.both 是字符串列。
time additional_time_in_mins
11:00:00 60
13:00:00 60
14:00:00 30
我必须将附加时间列中的分钟添加到实际时间,并在 pyspark 中创建如下输出。
预期输出:
new_time
12:00:00
14:00:00
14:30:00
有没有办法在 pyspark 中做到这一点
一个简单的选项是使用 unix_timestamp
函数在几秒钟内将 time
列转换为 bigint,添加分钟(分钟 * 60 秒) 然后将结果转换回 timestamp.
最后,转换为小时格式。
df = df.withColumn('new_time', F.date_format((F.unix_timestamp('time', 'HH:mm:ss') + F.col('additional_time_in_mins')*60).cast('timestamp'), 'HH:mm:ss'))
df.show()
+--------+-----------------------+--------+
| time|additional_time_in_mins|new_time|
+--------+-----------------------+--------+
|11:00:00| 60|12:00:00|
|13:00:00| 60|14:00:00|
|14:00:00| 30|14:30:00|
+--------+-----------------------+--------+
使用 UDF 执行此操作的其他方法:
from pyspark.sql.functions import date_format, col
data = [
("11:00:00", "60"),
("13:00:00", "60"),
("14:00:00", "30"),
]
df = spark.createDataFrame(data, ["time", "additional_time_in_mins"])
df.show()
UDF 逻辑求和时间
from pyspark.sql.types import StringType, IntegerType
from pyspark.sql.functions import udf
@udf(returnType=StringType())
def sum_time(var_time, additional_time):
# Converting var_time string to time
var_time = datetime.strptime(var_time, '%H:%M:%S').time()
#Using date to utitlise the time function
combined_time = (datetime.combine(date.today(), var_time) + timedelta(minutes=additional_time)).time()
return str(combined_time)
使用UDF得到最终输出:
df = df.withColumn(
"total_time", sum_time(col("time"), col("additional_time_in_mins").cast(IntegerType()))
)
display(df)