我想從它的價值小時變換火花數據框柱分秒如何將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