spark SQL 中的迄今为止的字符串(不是数据框)

Posted

技术标签:

【中文标题】spark SQL 中的迄今为止的字符串(不是数据框)【英文标题】:String to date in spark SQL (not dataframe) 【发布时间】:2021-12-23 18:12:01 【问题描述】:

我正在尝试使用 spark SQL 查询用户填写的日期未遵循任何严格格式的表,因此您会看到诸如“10/4/21”和“10/04/21”之类的条目, 例如。我的查询尝试是

select CAST(unix_timestamp(thedate,"mm/d/yy") AS TIMESTAMP) from table

这适用于像“10/4/21”这样的日期,但不适用于“10/04/21”(反之亦然,“mm/dd/yy”适用于“10/04/21”但不适用于“21 年 10 月 4 日”)。有什么方法可以格式化查询,使其适用于任何一种日期格式?

【问题讨论】:

【参考方案1】:

您可以尝试使用这两种格式转换thedate,然后应用COALESCE,以便返回使用有效格式转换的结果。


sql = """
SELECT thedate,
       Cast(COALESCE(unix_timestamp(thedate, "MM/d/yy"),
            unix_timestamp(thedate, "MM/dd/yy")
            ) AS TIMESTAMP) AS thedate_astimestamp 
FROM   (SELECT Explode(Array('10/4/21', '10/04/21', '10/11/21')) AS thedate)  
"""
spark.sql(sql).show()

输出

+--------+-------------------+
| thedate|thedate_astimestamp|
+--------+-------------------+
| 10/4/21|2021-10-04 00:00:00|
|10/04/21|2021-10-04 00:00:00|
|10/11/21|2021-10-11 00:00:00|
+--------+-------------------+

【讨论】:

以上是关于spark SQL 中的迄今为止的字符串(不是数据框)的主要内容,如果未能解决你的问题,请参考以下文章

forEach Spark Scala 中的错误:值选择不是 org.apache.spark.sql.Row 的成员

如何解决 Spark 中的“aggregateByKey 不是 org.apache.spark.sql.Dataset 的成员”?

当表很大时,是不是可以将 Spark SQL 与关系数据库一起使用?

如何提高我的 spark-sql-joins 的性能

sparksql怎么去掉na

spark中的isNullOrEmpty函数检查数据框中的列是不是为空或空字符串