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 的成员”?