Если у вас есть DF, как показано ниже:
+---+----+-----+
|ID |Type|Value|
+---+----+-----+
|ID1|001 |1 |
|ID1|002 |5 |
|ID2|A |12 |
|ID3|A |3 |
|ID3|B |3 |
|ID3|002 |5 |
|ID4|A |10 |
+---+----+-----+
Вы можете создать UDF, чтобы проверить, есть ли значение столбца в списке. Например:
val listOfValues = List("001", "002", "003", "004", "005")
def isInDef(p1: String): String = if (listOfValues.contains(p1) || (logic 2) && (logic 3)) "value 1"
else if (listOfValues.contains(p1) || (logic 3) || (logic 4)) "value 2"
else if (listOfValues.contains(p1) && (logic 4) && (logic 5)) "value 3"
else "value 4"
val isIn = udf[String, String](isInDef)
Затем вы можете использовать UDF для создания нового столбца с правильным значением из условий:
df = df.withColumn("contain", isIn($"Type"))
+---+----+-----+-------+
|ID |Type|Value|contain|
+---+----+-----+-------+
|ID1|001 |1 |value 1|
|ID1|002 |5 |value 2|
|ID2|A |12 |value 4|
|ID3|A |3 |value 4|
|ID3|B |3 |value 4|
|ID3|002 |5 |value 3|
|ID4|A |10 |value 4|
+---+----+-----+-------+