У меня есть датафрейм с начальным статусом с именем init.У меня есть датафрейм с той же схемой, где он имеет обновления для одного поля инициализации фрейма данных в строке и ноль в других полях.Как я могу восстановить каждую запись, применяя изменения последовательно?Чтобы быть более понятным, давайте рассмотрим следующий пример:
listOfTuples = [(101, "Status_0", '2019','value_col_4',0)]
init = spark.createDataFrame(listOfTuples , ["id", "status", "year","col_4","ord"])
#initial state
>>> init.show()
+---+--------+----+-----------+---+
| id| status|year| col_4|ord|
+---+--------+----+-----------+---+
| 1|Status_0|2019|value_col_4| 0|
+---+--------+----+-----------+---+
#dataframe with changes
schema = StructType([StructField('id', StringType(), True),
StructField('status', StringType(), True),
StructField('year', StringType(), True),
StructField('col_4', StringType(), True),
StructField('ord', IntegerType(), True)])
listOfTuples = [(1, "Status_A", None, None,1),
(1, "Status_B", None, None,2),
(1, None, None, "new_val", 3),
(1, "Status_C", None, None,4)]
changes = spark.createDataFrame(listOfTuples , schema)
>>> changes.show()
+---+--------+----+-------+---+
| id| status|year| col_4|ord|
+---+--------+----+-------+---+
| 1|Status_A|null| null| 1|
| 1|Status_B|null| null| 2|
| 1| null|null|new_val| 3|
| 1|Status_C|null| null| 4|
+---+--------+----+-------+---+
Я хочу, чтобы изменения применялись в окончательном фрейме данных последовательно с порядком столбца ord и базовыми значениями в init фрейма данных.Поэтому я хочу, чтобы мой окончательный фрейм данных был таким:
>>> final.show()
+---+--------+----+--------------+
| id| status|year| col_4 |
+---+--------+----+--------------+
| 1|Status_0|2019| value_col_4 |
| 1|Status_A|2019| value_col_4 |
| 1|Status_B|2019| value_col_4 |
| 1|Status_B|2019| new_val |
| 1|Status_C|2019| new_val |
+---+--------+----+--------------+
Я думал об объединении двух фреймов данных, отсортированных по столбцу ord, а затем о распространении изменений как-то ниже.Кто-нибудь знает, как это сделать?