Вы можете использовать, когда для всех условий, как показано ниже
val df = spark.sparkContext.parallelize(Seq(
(12345, 50, 20, 30, 100),
(23456, 50, 60, 30, 100),
(34567, 50, 60, 70, 100)
))
.toDF("ID", "MC", "T1", "T2", "MRP")
df.withColumn("SP",
when((($"MC" + $"T1").gt($"MRP")) && (($"MC" + $"T2").gt($"MRP")), $"MRP")
.otherwise(
when((($"MC" + $"T1").lt($"MRP")) && (($"MC" + $"T2").lt($"MRP")), greatest(($"MC" + $"T1"), ($"MC" + $"T2")))
.otherwise(
when((($"MC" + $"T1").gt($"MRP")), $"MC" + $"T2")
.otherwise($"MC" + $"T1")
)
)
).show(false)
ВЫВОД:
+-----+---+---+---+---+---+
|ID |MC |T1 |T2 |MRP|SP |
+-----+---+---+---+---+---+
|12345|50 |20 |30 |100|80 |
|23456|50 |60 |30 |100|80 |
|34567|50 |60 |70 |100|100|
+-----+---+---+---+---+---+
Чтобы повысить эффективность, вы можете вычислить все MC+T1
и M+T2
ранее, чтобы вам не приходилось каждый раз вычислять, а потом отбрасывать, если вы этого не хотите.