两个数据帧的合并结果将近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"))
答案 0 :(得分:1)
使用拖放删除不必要的列
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").drop($"Sales")
.orderBy($"Id", $"Grade"))