如何在 spark sql 连接条件中将字符串数据类型转换为日期:to_date 不起作用并且转换抛出错误

Posted

技术标签:

【中文标题】如何在 spark sql 连接条件中将字符串数据类型转换为日期:to_date 不起作用并且转换抛出错误【英文标题】:How to cast string dataype to date in spark sql join condition: to_date not working and cast is throwing error 【发布时间】:2019-05-15 17:25:50 【问题描述】:

我正在使用 pyspark 在 redshift 中加入两个表。连接条件是在一个表中的日期为字符串格式的日期和另一个表中的数据类型为 varchar 之间

销售额:

Sales    id    tx_date
123.5    1234  2019-02-15
154      1235  2019-02-14

数据信息:

Date      Multiplier 
02/15/19  2
02/14/19  3

而我的 spark sql 是

data = spark.sql(""" select s.sales,s.id, ,d.multiplier from  sales s inner join
                    dateinfo d on s.tx_date=to_date(d.date,'mm/dd/yy')""")

这将为乘数列返回空值

Sales    id    multiplier
123.5    1234  
154      1235 

我已经尝试过投射日期

data = spark.sql(""" select s.sales,s.id, ,d.multiplier from  sales s inner join
                        dateinfo d on s.tx_date=to_date(cast(unix_timestamp(d.date,'mm/dd/yy')))"""

这会引发错误 AnalysisException: u'函数转换的参数数量无效;

我应该如何在 spark-sql 中使用日期转换

【问题讨论】:

【参考方案1】:

你使用了错误的方法,你试试这个:

data = spark.sql(""" select s.sales,s.id, ,d.multiplier from  sales s inner join
                    dateinfo d on s.tx_date=to_date(cast(unix_timestamp(d.date,'mm/dd/yy') as TIMESTAMP))"""

【讨论】:

我已经试过了,但是乘数列还是空的

以上是关于如何在 spark sql 连接条件中将字符串数据类型转换为日期:to_date 不起作用并且转换抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 条件中将 INT 转换为 VARCHAR [重复]

Sql Server 中将由逗号“,”分割的一个字符串转换为一个表集,并应用到 in 条件中

如何在 Asp.Net Core Mvc 5.0 中将 sql 数据库与 ado.net 连接?

如何在状态图中将代理的条件与所有连接的代理进行比较

sql server 中将由逗号“,”分割的一个字符串,转换为一个表,并应用与 in 条件

如何在 SQL Server 中将字符串转换为日期时间?