Объединение двух данных приводит к почти 60 столбцам. Большинство из них предполагают, что они останутся как есть, но некоторые требуют обновления на основе значений в других столбцах. Есть ли способ обновить эти столбцы без вычисления новых, удаления оригиналов и переименования вычисленных обратно?
Упрощенный пример: доход в столбце $"Sales
на левом фрейме данных должен быть взвешен на $"Weight
в результатах объединения. Есть ли эффективный способ сделать расчет без генерации $"SalesWeighted
как нового столбца, отбрасывая исходный $Sales
и переименовывая $SalesWeighted
в $Sales
?
val l = Seq((1, 50), (2, 35), (3, 66))
.toDF("Id", "Sales")
val r = Seq((1, "Premium", 0.2), (1, "Standard", 0.8),
(2, "Premium", 0.4), (2, "Standard", 0.6),
(3, "Premium", 0.333), (3, "Standard", 0.333), (3, "Garbage", 0.334))
.toDF("Id", "Grade", "Weight")
display(l.join(r, Seq("Id")).withColumn("SalesWeighted", $"Sales"*$"Weight")
.orderBy($"Id", $"Grade"))