import spark.implicits._
import org.apache.spark.sql.functions._
val sourceDF = Seq(
(1,2,3,4,5,6,7,8,9,10, "11", "12", "13", "14", "15", "16", "17", "18", "19", true),
(11,12,13,14,5,6,7,8,9,10, "11", "12", "13", "14", "15", "16", "17", "18", "19", false),
(1,2,3,4,25,26,27,8,9,10, "11", "12", "13", "14", "15", "16", "17", "18", "19", true),
(1,2,3,4,5,6,7,38,39,10, "11", "12", "13", "14", "15", "16", "17", "18", "19", false),
(1,2,3,4,5,6,7,8,9,410, "11", "12", "13", "14", "15", "16", "17", "18", "19", true)
).toDF("col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8", "col9", "col10",
"col11", "col12", "col13", "col14", "col15", "col16", "col17", "col18", "col19", "col20")
val resDF = sourceDF
.withColumn("col_result",
when(
'col1.equalTo(1) && 'col2.equalTo(2) && 'col3.equalTo(3) &&
'col4.equalTo(4) && 'col5.equalTo(5) && 'col6.equalTo(6) &&
'col7.equalTo(7) && 'col8.equalTo(8) && 'col9.equalTo(9) &&
'col10.equalTo(10) && 'col11.equalTo("11") && 'col12.equalTo("12") &&
'col13.equalTo("13") && 'col14.equalTo("14") && 'col15.equalTo("15") &&
'col16.equalTo("16") && 'col17.equalTo("17") && 'col18.equalTo("18") &&
'col19.equalTo("19") && 'col20.equalTo(true),"result").otherwise(null))
resDF.show(false)
// +----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----------+
// |col1|col2|col3|col4|col5|col6|col7|col8|col9|col10|col11|col12|col13|col14|col15|col16|col17|col18|col19|col20|col_result|
// +----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----------+
// |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 |11 |12 |13 |14 |15 |16 |17 |18 |19 |true |result |
// |11 |12 |13 |14 |5 |6 |7 |8 |9 |10 |11 |12 |13 |14 |15 |16 |17 |18 |19 |false|null |
// |1 |2 |3 |4 |25 |26 |27 |8 |9 |10 |11 |12 |13 |14 |15 |16 |17 |18 |19 |true |null |
// |1 |2 |3 |4 |5 |6 |7 |38 |39 |10 |11 |12 |13 |14 |15 |16 |17 |18 |19 |false|null |
// |1 |2 |3 |4 |5 |6 |7 |8 |9 |410 |11 |12 |13 |14 |15 |16 |17 |18 |19 |true |null |
// +----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----------+
Variant 2
val res1DF = sourceDF.withColumn("col_result_1",
when(col("col8") === 38 || col("col20") === false, "good check" )
.when(col("col10") === 410 && col("col17") === "17" && col("col20") === true, "next good check")
.otherwise("we use when many many")
)
res1DF.show(false)
// +----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----------------------+
// |col1|col2|col3|col4|col5|col6|col7|col8|col9|col10|col11|col12|col13|col14|col15|col16|col17|col18|col19|col20|col_result_1 |
// +----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----------------------+
// |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 |11 |12 |13 |14 |15 |16 |17 |18 |19 |true |we use when many many|
// |11 |12 |13 |14 |5 |6 |7 |8 |9 |10 |11 |12 |13 |14 |15 |16 |17 |18 |19 |false|good check |
// |1 |2 |3 |4 |25 |26 |27 |8 |9 |10 |11 |12 |13 |14 |15 |16 |17 |18 |19 |true |we use when many many|
// |1 |2 |3 |4 |5 |6 |7 |38 |39 |10 |11 |12 |13 |14 |15 |16 |17 |18 |19 |false|good check |
// |1 |2 |3 |4 |5 |6 |7 |8 |9 |410 |11 |12 |13 |14 |15 |16 |17 |18 |19 |true |next good check |
// +----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----------------------+