Как заполнить значения из исходных таблиц в целевую таблицу в новом столбце на основе некоторого условия с помощью pyspark?

#python #apache-spark #pyspark #apache-spark-sql

#python #apache-spark #pyspark #apache-spark-sql

Вопрос:

У меня есть 3 фрейма данных — df1, df2, df3

где df1 — целевая таблица, а df2, df3 — исходные таблицы.

df2

ID Имя отмечает
1 алекс 30
2 джон 70
3 джейсон 80

df3

ID Имя Статус
1 алекс сбой
2 джон передать
3 джейсон передать

и df1 будет иметь следующие значения. т.е.. Я хочу получить статус для неудачных учеников (из df3) и оценки для прошедших учеников (из df2) в df1 с новым столбцом с именем «статус и оценки».

ID Имя статус и метки
1 алекс сбой
2 джон 70
3 джейсон 80

Каков наилучший способ добиться этого с помощью pysaprk?

Ответ №1:

Вы можете объединить df2 и df3 , а затем использовать when функцию:

 from pyspark.sql import functions as F

df1 = df2.join(df3, ['id', 'name'], "inner")
            .withColumn("statusamp;marks", F.when(F.col("status")=="fail", F.col('status'))
            .otherwise(F.col('marks'))).drop('marks', 'status')

 --- ----- ------------                                                         
| id| name|statusamp;marks|
 --- ----- ------------ 
|  1| alex|        fail|
|  2| john|          70|
|  3|jason|          80|
 --- ----- ------------ 
 

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

1. Допустим, в статусе или метках присутствуют нулевые значения, тогда как использовать «когда» для достижения этого?

2. Вам не нужно ничего менять, это работает и для нулей.