如何在 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 不起作用并且转换抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在Spark sql中将列转换为Int

Scala - 如何在 Spark SQL 查询中将日期字符串转换为时间戳?

在 spark sql 中将字符串类型转换为数组类型

如何在 Spark Scala 的 UDF 中将列作为值传递以检查条件

在 Spark 中连接两个数据帧

在 Spark SQL 中将多个小表与大表连接的最佳方法