首页 > 解决方案 > Pyspark SQL 合并数据类型与日期转换不匹配

问题描述

我正在使用左连接连接两个数据框。左表中的行可能不匹配,因此我尝试使用 coalesce 函数设置默认值

import pyspark.sql.functions as F

joined = t1\
        .join(t2, on="id", how='left')\
        .select(t1["*"],
                F.coalesce(t2.date, F.to_date('2019-01-01')))

我收到以下错误

pyspark.sql.utils.AnalysisException: 'cannot resolve \'CAST(t1.`2019-01-01` AS DATE)\' due to data type mismatch: cannot cast decimal(38,3) to date;;\n\...

我已经确认 t2.date 实际上是一个日期类型。其他 t1 列是错误中看到的十进制数据类型,因此在我看来,它正在尝试将每一列都转换为此日期类型:S

任何帮助将不胜感激

标签: apache-sparkpysparkapache-spark-sql

解决方案


日期字符串被解释为 t1 的列名。您应该将其指定为文字列。

import pyspark.sql.functions as F

joined = t1\
        .join(t2, on="id", how='left')\
        .select(t1["*"],
                F.coalesce(t2.date, F.to_date(F.lit('2019-01-01')))
               )

推荐阅读