apache-spark - 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
任何帮助将不胜感激
解决方案
日期字符串被解释为 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')))
)
推荐阅读
- reactjs - 如何在回调中调用 useSelector
- java - spring boot restful应用程序中如何响应pbf文件?
- reactjs - 使用 react-apollo useMutation hook 处理错误
- android - 如何在 Android 10、Target API 29 中从设备的共享存储(根目录)读取现有文件?
- python - 我收到登录路由 TypeError 的错误:'int' object is not subscriptable
- azure - 无法使用 ansible 从捕获的 azure 映像创建 VM
- java - 持有人cardview更改textview颜色错误
- bash - shell script to Start/Stop tomcat server
- android - 保护应用免于绕过根检测(Frida Server)
- java - 如何在火花中处理这种情况?