Вы можете использовать length , чтобы найти длину строки, а затем используйте rank , чтобы найти порядок и выровнять их в порядке des c, чтобы получить максимальную длину:
import org.apache.spark.sql.expressions.Window
val df = Seq(("abc"), ("abcdef")).toDF("str")
val win=Window.orderBy(length(col("str")).desc)
val finalDf = df
.withColumn("len", length(col("str")))
.withColumn("rank", row_number().over(win))
finalDf.show()
Вывод:
+-------+---+----+
| str|len|rank|
+-------+---+----+
| abcdef| 6| 1|
| abc| 3| 2|
+-------+---+----+
, а затем:
val maxLen = finalDf.collect()(0)(1).asInstanceOf[Int]