我想从它的价值小时变换火花数据框柱分秒如何将HH:MM:SS:Ms的Spark Dataframe列转换为秒值?
E.g“01:12:17.8370000”
将成为4337 S必填的评论。
或“00:00:39.0390000”
会变成39秒。
我已阅读此问题,但我迷失在如何使用此代码来转换我的spark数据框列。
像这样的事情
df.withColumn("duration",col("duration")....)
我使用Scala的2.10.5和火花1.6
谢谢
我想从它的价值小时变换火花数据框柱分秒如何将HH:MM:SS:Ms的Spark Dataframe列转换为秒值?
E.g“01:12:17.8370000”
将成为4337 S必填的评论。
或“00:00:39.0390000”
会变成39秒。
我已阅读此问题,但我迷失在如何使用此代码来转换我的spark数据框列。
像这样的事情
df.withColumn("duration",col("duration")....)
我使用Scala的2.10.5和火花1.6
谢谢
如果你有一个字符串列,你可以写一个UDF手动计算的:
val df = Seq("01:12:17.8370000", "00:00:39.0390000").toDF("duration")
def str_sec = udf((s: String) => {
val Array(hour, minute, second) = s.split(":")
hour.toInt * 3600 + minute.toInt * 60 + second.toDouble.toInt
})
df.withColumn("duration", str_sec($"duration")).show
+--------+
|duration|
+--------+
| 4337|
| 39|
+--------+
假设列 “持续时间” 包含在持续时间字符串,你可以使用functions
包的“unix_timestamp”函数来获取传递模式的秒数:
import org.apache.spark.sql.functions._
val df = Seq("01:12:17.8370000", "00:00:39.0390000").toDF("duration")
val newColumn = unix_timestamp(col("duration"), "HH:mm:ss")
val result = df.withColumn("duration", newColumn)
result.show
+--------+
|duration|
+--------+
| 4337|
| 39|
+--------+
有inbuilt functions你可以利用其中比使用udf
速度更快,效率功能
给定输入数据帧为
+----------------+
|duration |
+----------------+
|01:12:17.8370000|
|00:00:39.0390000|
+----------------+
所以你可以做类似下面
df.withColumn("seconds", hour($"duration")*3600+minute($"duration")*60+second($"duration"))
你应该得到的
+----------------+-------+
|duration |seconds|
+----------------+-------+
|01:12:17.8370000|4337 |
|00:00:39.0390000|39 |
+----------------+-------+
你是如何从第一时间戳值获得3737秒输出? –
是的你是正确的我编辑我的变化 – gimp770