spark进行数据分析时,遇到hive中形如“2018-1-31 24:03:00”的非标准日期,由于该日期不仅位数不是标准化的,而且出现了24点03的时间,导致自带的date_format函数和 from_unixtime(unix_timestamp())都无法正常处理,最终选择用户自定义函数解决。
def dateFormat(dateTime: String):String={
val arr: Array[String] = dateTime.split(" ")
val ymd: String = arr(0)
.split("-")
.map(_.toInt)
.map(d => s"${if (d < 10) "0" else ""}$d")
.mkString("-")
var bool = false
val hms: String = arr(1)
.split(":")
.map(_.toInt)
.zipWithIndex
.map(d => if (d._2 == 0 && d._1 >= 24) {
bool = true
d._1 - 24
} else
d._1
)
.map(d => s"${if (d < 10) "0" else ""}$d")
.mkString(":")
val date: String = Array(ymd, hms).mkString("T")
LocalDateTime
.parse(date)
.plusDays(if (bool)1 else 0)
.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
}