Как заменить значение в кадре данных на основе значения из другого столбца в том же кадре данных? - PullRequest
0 голосов
/ 11 мая 2019

У меня есть датафрейм, полученный после чтения таблицы, как показано ниже, с использованием spark:

val orgDF = spark.read.format("jdbc").options("url", url).options("dbtable","select id, org_name, delete_state, soft_del, 0 as soft_del from schema.table as orgTable").options("user",username)options("password",pwd).load()

Я вижу выходные данные из кадра данных, как показано ниже:

-----------------------------------------
id | org_name  | delete_state | soft_del
-----------------------------------------
1  | Net       | delete       |   0
2  | Vert      | delete       |   0
3  | Bio       | insert       |   0
4  | Card      | delete       |   0
7  | stock     | update       |   0
-----------------------------------------

Перед сохранением кадра данных в HDFS я пытаюсь установить значение col: soft_del как '1', если значение столбца в delete_state равно delete и создайте окончательный кадр данных, как показано ниже:

  -----------------------------------------
    id | org_name  | delete_state | soft_del
    -----------------------------------------
    1  | Net       | delete       |   1
    2  | Vert      | delete       |   1
    3  | Bio       | insert       |   0
    4  | Card      | delete       |   1
    7  | Stock     | update       |   0
    -----------------------------------------

Я знаю, что есть способ сделать это, как показано ниже:

orgDF.createOrReplaceTempView("orgData")
spark.sql("update orgData set soft_del = 1 where delete_state = 'delete'")

Я также пытаюсь узнать, как использовать функции фрейма данных, и не могу найти правильный материал. Может кто-нибудь сообщить, как я могу сделать это, используя функции dataframe?

1 Ответ

2 голосов
/ 11 мая 2019

Вы можете попробовать что-то вроде этого

orgDF.withColumn("soft_del", when($"delete_state" === "delete", 1).otherwise(0))

Вы также можете связать несколько when с, если вам нужно, что-то вроде

orgDF.withColumn("soft_del", 
  when($"delete_state" === "delete", 1)
  .when($"delete_state" === "update", 2)
  .otherwise(0)
)

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...