scala - 将列合并为一个值
问题描述
我正在从 S3 读取 DF。这就是我的架构的样子 -
文件 1 -
root
|-- patient: long (nullable = true)
|-- payment1: double (nullable = true)
文件 2 -
root
|-- patient: long (nullable = true)
|-- payment2: double (nullable = true)
我正在尝试合并支付字段,但无法成功。我需要这样做是因为我需要添加两个付款字段,并且它们都可以为 NULL 或空。
到目前为止,我已经尝试了以下方法 -
df.na.fill
- 不起作用,因为我有空字符串.select(when(col("payment1") === "", 0.0).otherwise(col("payment1"))
当我添加两列时使用上述两种方法,如果一个值为 NULL 或空,我仍然会得到 NULL。
解决方案
您可以使用 when 方法检查空和 null,将其替换为 lit(0) 并将其强制转换为双精度(如果列的数据类型不是双精度,则不需要强制转换)。
file1Df.withColumn("payment1",
when(col("payment1") === "" or col("payment1").isNull,lit(0))
.otherwise(col("payment1")).cast(DoubleType))
推荐阅读
- discord.py - 如何查看角色在过去 28 天内发送了多少消息?不和谐.py
- bash - 如何使用 bash 脚本在文件中找到最大值?
- websocket - 任何人都可以提供一个 fastapi websocket 端点,它可以与 RTK 查询流更新给出的示例连接
- vue.js - Vue js,某些页面中没有定义道具
- python - 类型错误:接受 4 个位置参数,但给出了 5 个
- python - 从python中的字典值对中删除重复项?
- react-native - Flatlist 中的多项选择对于大型列表来说是滞后的
- amazon-web-services - 尝试在 Redshift 中创建日期表
- android - Jetpack Compose 中的键盘导航
- python - 如何在 Python 中创建一个具有 2 个输入的方阵,每个输入都有“n”个值?