首页 > 解决方案 > 将列合并为一个值

问题描述

我正在从 S3 读取 DF。这就是我的架构的样子 -

文件 1 -

root

|-- patient: long (nullable = true)
 |-- payment1: double (nullable = true)

文件 2 -

root

|-- patient: long (nullable = true)
 |-- payment2: double (nullable = true)

我正在尝试合并支付字段,但无法成功。我需要这样做是因为我需要添加两个付款字段,并且它们都可以为 NULL 或空。

到目前为止,我已经尝试了以下方法 -

  1. df.na.fill- 不起作用,因为我有空字符串
  2. .select(when(col("payment1") === "", 0.0).otherwise(col("payment1"))

当我添加两列时使用上述两种方法,如果一个值为 NULL 或空,我仍然会得到 NULL。

标签: scalaapache-sparkaws-glue

解决方案


您可以使用 when 方法检查空和 null,将其替换为 lit(0) 并将其强制转换为双精度(如果列的数据类型不是双精度,则不需要强制转换)。

file1Df.withColumn("payment1",
  when(col("payment1") === "" or col("payment1").isNull,lit(0))
    .otherwise(col("payment1")).cast(DoubleType))

推荐阅读