Spark Scala:将DDMONYYYY格式日期转换为YYYY-MM-DD格式求助
解决Spark DataFrame中日期格式转换问题
要将DDMONYYYY格式的字符串日期转换为YYYY-MM-DD格式,需要分两步处理:先把字符串解析为Spark的日期类型,再格式化为目标字符串格式。你的现有代码直接使用date_format处理字符串字段会导致解析失败(返回null),因为date_format要求输入为日期/时间戳类型。
修正后的代码示例
import org.apache.spark.sql.functions.{col, to_date, date_format} val df = spark.sqlContext.createDataFrame(Seq( ("steak", "1990-01-01", "30Mar2022", 150), ("steak", "2000-01-02", "13Jan2021", 180), ("fish", "1990-01-01", "01Feb2001", 100) )).toDF("name", "startDate", "endDate", "price") // 一步完成解析+格式化 val dfResult = df.withColumn("formattedEndDate", date_format(to_date(col("endDate"), "ddMMMyyyy"), "yyyy-MM-dd") ) dfResult.show()
代码说明
to_date(col("endDate"), "ddMMMyyyy"):将DDMONYYYY格式的字符串解析为Spark日期类型。这里的格式符注意大小写:dd:两位数字的日期(如30、13)MMM:月份的英文缩写(如Mar、Jan)yyyy:四位数字的年份
date_format(..., "yyyy-MM-dd"):将解析后的日期类型转换为YYYY-MM-DD格式的字符串。
输出结果
+-----+----------+----------+-----+---------------+ | name| startDate| endDate|price|formattedEndDate| +-----+----------+----------+-----+---------------+ |steak|1990-01-01|30Mar2022 | 150| 2022-03-30| |steak|2000-01-02|13Jan2021 | 180| 2021-01-13| | fish|1990-01-01|01Feb2001 | 100| 2001-02-01| +-----+----------+----------+-----+---------------+
内容的提问来源于stack exchange,提问作者Samboo
相关产品推荐
相关产品推荐

