【问题标题】:Pyspark SQL coalesce data type mismatch with date castPyspark SQL 合并数据类型与日期转换不匹配
【发布时间】:2020-11-25 23:40:44
【问题描述】:

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

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

任何帮助将不胜感激

【问题讨论】:

  • '2019-01-01' 在您的代码中被视为列名,将其更改为F.lit('2019-01-01')

标签: apache-spark pyspark apache-spark-sql


【解决方案1】:

日期字符串被解释为 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')))
               )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2019-04-27
    相关资源
    最近更新 更多