SparkSql用户自定义函数处理非标准时间(scala)

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)
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值