[英]How to convert a string column (column which contains only time and not date ) to time_stamp in spark-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.