繁体   English   中英

Scala:如何将整数转换为时间戳

[英]Scala : how to convert integer to time stamp

当我尝试使用“months_between”函数查找两个日期之间的月数时,我遇到了一个问题。 当我的输入日期格式为“dd/mm/yyyy”或任何其他日期格式时,该函数将返回正确的输出。 但是,当我将输入日期格式作为 yyyymmdd 传递时,出现以下错误。

代码:

val df = spark.read.option("header", "true").option("dateFormat", "yyyyMMdd").option("inferSchema", "true").csv("MyFile.csv")
 val filteredMemberDF = df.withColumn("monthsBetween", functions.months_between(col("toDate"), col("fromDT")))

错误:

由于数据类型不匹配,无法解析“months_between( toDate , fromDT )”:参数 1 需要时间戳类型,但是,“ toDate ”是 int 类型。 参数 2 需要时间戳类型,但是,' fromDT ' 是 int 类型。

当我的输入如下时,

id   fromDT     toDate
11   16/06/2008  16/08/2008
12   13/07/2008  13/10/2008

获得预期输出,

id   fromDT     toDate     monthsBetween
11   16/6/2008  16/8/2008      2
12   13/7/2008  13/10/2008     3

当我传递以下数据时,面对上述错误。

id   fromDT     toDate  
11   20150930  20150930  
12   20150930  20150930 

您首先需要使用to_date函数将这些数字转换为 DateTimes。

import org.apache.spark.sql.functions._

val df = spark.read
  .option("header", "true")
  .option("dateFormat", "yyyyMMdd")
  .option("inferSchema", "true")
  .csv("MyFile.csv")

val dfWithDates = df
  .withColumn("toDateReal", to_date(concat(col("toDate")), "yyyyMMdd"))
  .withColumn("fromDateReal", to_date(concat(col("fromDT")), "yyyyMMdd"))

val filteredMemberDF = dfWithDates
  .withColumn("monthsBetween", months_between(col("toDateReal"), col("fromDateReal")))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM