#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. Вам не нужно ничего менять, это работает и для нулей.