Я написал функцию scala, которая будет преобразовывать время (ЧЧ: мм: сс.ССС) в секунды. Сначала он будет игнорировать миллисекунды и займет только (ЧЧ: мм: сс) и преобразуется в секунды (целые). Работает нормально при тестировании в spark-shell.
def hoursToSeconds(a: Any): Int = {
val sec = a.toString.split('.')
val fields = sec(0).split(':')
val creationSeconds = fields(0).toInt*3600 + fields(1).toInt*60 + fields(2).toInt
return creationSeconds
}
print(hoursToSeconds("03:51:21.2550000"))
13881
Мне нужно было бы передать эту функцию в один из столбцов данных (выполняется), который я пытался с помощью метода withColumn, но получаю ошибку Несоответствие типов, ожидаемое: столбец, фактическая строка . Буду признателен за любую помощь, есть ли способ передать функцию scala в udf и затем использовать udf в df.withColumn.
df.printSchema
root
|-- vin: string (nullable = true)
|-- BeginOfDay: string (nullable = true)
|-- Timezone: string (nullable = true)
|-- Version: timestamp (nullable = true)
|-- Running: string (nullable = true)
|-- Idling: string (nullable = true)
|-- Stopped: string (nullable = true)
|-- dlLoadDate: string (nullable = false)
образец работает значения столбца.
df.withColumn("running", hoursToSeconds(df("Running")