Scala Spark DataFrame中yyyymmddhh24miss字符串转指定日期格式如何实现
解决方案
你可以直接用Spark内置的to_timestamp和date_format函数组合实现需求,不需要自定义UDF,性能更好:
- 先用
to_timestamp函数指定输入字符串的格式为yyyyMMddHHmmss,把字符串类型的last_edit转换为时间类型 - 再用
date_format函数把时间类型按照你需要的dd-MM-yyyy HH:mm:ss格式输出即可
修改后的代码如下:
%scala import org.apache.spark.sql.functions._ val DF_MelbParkBayInfo = spark.sql("select the_geom,marker_id,meter_id,bay_id, last_edit, rd_seg_id,rd_seg_dsc from temp_MelbParkBayInfo") // 转换last_edit字段,下面两种写法按需二选一 // 写法1:保留原始last_edit字段,新增格式化后的新字段 val resultDF = DF_MelbParkBayInfo.withColumn("last_edit_formatted", date_format( to_timestamp(col("last_edit"), "yyyyMMddHHmmss"), "dd-MM-yyyy HH:mm:ss" ) ) // 写法2:直接覆盖原始last_edit字段 // val resultDF = DF_MelbParkBayInfo.withColumn("last_edit", // date_format( // to_timestamp(col("last_edit"), "yyyyMMddHHmmss"), // "dd-MM-yyyy HH:mm:ss" // ) // )
注意事项
- 时间格式符区分大小写:
MM代表月份,mm代表分钟;HH代表24小时制小时,hh代表12小时制小时,写错格式符会导致转换结果错误或者返回null - 若存在不符合
yyyyMMddHHmmss格式的脏数据,转换后会返回null,可以通过resultDF.filter(col("last_edit_formatted").isNull).show()筛选出异常数据单独处理
内容的提问来源于stack exchange,提问作者mmoayed
相关产品推荐
相关产品推荐

