【问题标题】:Coalesce a column to a value将列合并为一个值
【发布时间】:2020-10-13 08:50:08
【问题描述】:

我正在从 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。

【问题讨论】:

  • 你在哪里有“空字符串”?根据您的架构,根本没有字符串
  • 也许使用coalesce函数? when(coalesce(col("payment1"), col("payment2")).isNull, 0.0)

标签: scala apache-spark aws-glue


【解决方案1】:

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

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

【讨论】:

  • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票。
猜你喜欢
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
  • 2011-10-23
  • 2016-01-10
  • 1970-01-01
相关资源
最近更新 更多