Если ваши результирующие столбцы будут иметь ту же длину, что и исходная, вы можете создать новые столбцы с помощью функции withColumn и путем применения udf. После этого вы можете удалить исходный столбец, например:
val newDf = myDf.withColumn("newCol1", myFun(myDf("originalColumn")))
.withColumn("newCol2", myFun2(myDf("originalColumn"))
.drop(myDf("originalColumn"))
, где myFun - это udf, определяемый следующим образом:
def myFun= udf(
(originalColumnContent : String) => {
// do something with your original column content and return a new one
}
)