Ошибка, которую вы получаете, просто связана с тем, что java.sql.Timestamp
не импортируется. Тем не менее, его импорт может привести к другой проблеме:
error: type mismatch;
found : java.util.Date
required: java.sql.Timestamp
Чтобы это исправить, вам просто нужно создать java.sql.Timestamp
в вашем UDF:
def fmt(d:String) = {
val ts = new SimpleDateFormat("dd-MM-yyyy").parse(d).getTime
new java.sql.Timestamp(ts)
}
val reFormat = udf(fmt(_:String):java.sql.Timestamp)
df.select('dates, reFormat('dates)).show
+----------+-------------------+
| dates| UDF(dates)|
+----------+-------------------+
|24-12-2017|2017-12-24 00:00:00|
|25-01-2016|2016-01-25 00:00:00|
+----------+-------------------+
Это исправляет ваш UDF, но учтите, что в SparkSQL API есть функция, которая делает именно то, что вы хотите:
df.select('dates, to_timestamp('dates, "dd-MM-yyyy")).show
+----------+-----------------------------------+
| dates|to_timestamp(`dates`, 'dd-MM-yyyy')|
+----------+-----------------------------------+
|24-12-2017| 2017-12-24 00:00:00|
|25-01-2016| 2016-01-25 00:00:00|
+----------+-----------------------------------+