Объединить столбец со значением

#scala #apache-spark #aws-glue

#scala #apache-spark #aws-склеивание

Вопрос:

Я считываю DF из S3. Вот как выглядит моя схема —

Файл 1 —

 root

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

Файл 2 —

 root

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

Я пытаюсь объединить поля оплаты, но не могу сделать это успешно. Мне нужно это сделать, потому что мне нужно добавить два поля оплаты, и оба они могут быть нулевыми или пустыми.

До сих пор я пробовал следующее —

  1. df.na.fill — Не работает, потому что у меня есть пустые строки
  2. .select(when(col("payment1") === "", 0.0).otherwise(col("payment1"))

Используя два вышеуказанных метода, когда я добавляю два столбца, я все равно получаю NULL, если одно значение равно NULL или пусто.

Комментарии:

1. где у вас есть «пустые строки»? Согласно вашей схеме, строк вообще нет

2. Может быть, с помощью coalesce функции? when(coalesce(col("payment1"), col("payment2")).isNull, 0.0)

Ответ №1:

Вы можете проверить наличие empty и null с помощью метода when, заменить его на lit(0) и преобразовать его в double (если тип данных столбца отличается от double, в противном случае приведение не требуется).

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

Комментарии:

1. Пожалуйста, не публикуйте только код в качестве ответа, но также предоставьте объяснение, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением обычно более полезны и более высокого качества и с большей вероятностью привлекут голоса.