栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Spark中将包含多种字符串日期格式的列转换为DateTime

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Spark中将包含多种字符串日期格式的列转换为DateTime

我个人建议直接使用SQL函数,而不必进行昂贵且效率低的重新格式化:

from pyspark.sql.functions import coalesce, to_datedef to_date_(col, formats=("MM/dd/yyyy", "yyyy-MM-dd")):    # Spark 2.2 or later syntax, for < 2.2 use unix_timestamp and cast    return coalesce(*[to_date(col, f) for f in formats])

这将选择第一种格式,该格式可以成功解析输入字符串。

用法:

df = spark.createDataframe([(1, "01/22/2010"), (2, "2018-12-01")], ("id", "dt"))df.withColumn("pdt", to_date_("dt")).show()+---+----------+----------+| id|        dt|       pdt|+---+----------+----------+|  1|01/22/2010|2010-01-22||  2|2018-12-01|2018-12-01|+---+----------+----------+

速度比快

udf
,添加新格式仅是调整
formats
参数的问题。

但是,它不会帮助您解决格式歧义问题。在一般情况下,如果没有人工干预和与外部数据的交叉引用,可能无法做到这一点。

当然可以在Scala中完成同一件事:

import org.apache.spark.sql.Columnimport org.apache.spark.sql.functions.{coalesce, to_date}def to_date_(col: Column,   formats: Seq[String] = Seq("MM/dd/yyyy", "yyyy-MM-dd")) = {  coalesce(formats.map(f => to_date(col, f)): _*)}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/391347.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号