Я бы предложил использовать UDF (пользовательскую функцию), которая принимает столбец как key
для переданной поисковой карты, чтобы вернуть соответствующее значение карты, как показано ниже:
import org.apache.spark.sql.functions._
import spark.implicits._
def getMapValue(m: Map[String, String], defaultValue: String) = udf{
(key: String) => m.getOrElse(key, defaultValue)
}
val df = Seq(
(1, "a"), (2, "b"), (3, "c")
).toDF("id", "key")
val lookupMap = Map("a" -> "xx", "c" -> "zz")
df.withColumn("value", getMapValue(lookupMap, "")($"key")).show
// +---+---+-----+
// | id|key|value|
// +---+---+-----+
// | 1| a| xx|
// | 2| b| |
// | 3| c| zz|
// +---+---+-----+
РЕДАКТИРОВАТЬ: см. Другой ответ для решения с использованием встроенных функций Spark, которые обычно работают лучше, чем UDF.