Например, у вас есть примерный кадр данных из одного столбца, как показано ниже
val df = sc.parallelize(Seq(3)).toDF()
df.show()
// Ниже UDF, который вернет кортеж
def tupleFunction(): (Int,Int) = (1,2)
// мы создадим два новых столбца из указанного выше UDF
df.withColumn("newCol",typedLit(tupleFunction.toString.replace("(","").replace(")","")
.split(","))).select((0 to 1)
.map(i => col("newCol").getItem(i).alias(s"newColFromTuple$i")):_*).show