Вы можете попробовать следующим образом:
import org.apache.spark.sql.functions.{length, max}
import spark.implicits._
val df = Seq(("abc","abcd","abcdef"),
("a","BCBDFG","qddfde"),
("MN","1234B678","sd"),
(null,"","sd")).toDF("COL1","COL2","COL3")
df.cache()
val output = df.columns.map(c => (c, df.agg(max(length(df(s"$c")))).as[Int].first())).toSeq.toDF("COLUMN_NAME", "MAX_LENGTH")
+-----------+----------+
|COLUMN_NAME|MAX_LENGTH|
+-----------+----------+
| COL1| 3|
| COL2| 8|
| COL3| 6|
+-----------+----------+
Я думаю, что это хорошая идея, чтобы кэшировать входной фрейм данных df
, чтобы ускорить вычисления.
/^[A-Za-z](?=[A-Za-z0-9_.]{3,31}$)[a-zA-Z0-9_]*\.?[a-zA-Z0-9_]*$/
Или немного короче:
/^[a-z](?=[\w.]{3,31}$)\w*\.?\w*$/i
Используя предвидения Вы могли сделать следующее:
^(?=[A-Za-z](?:\w*(?:\.\w*)?$))(\S{4,32})$
Поскольку Вы не указывали, в каком regex Вы нуждались, я добавил много Perl 5 совместимый материал. Как (?: ... )
для неполучения parens.
Примечание: Я добавил, что пропавшие без вести окружают paren назад.
Один точечный предел? Это хитро.
Я не regex эксперт, но я думаю, что это получило бы его, за исключением этого:
[A-Za-z][A-Za-z0-9_.]{3,31}
Возможно, Вы могли проверить на. требование отдельно?
/[a-zA-Z][a-zA-Z0-9_]*\.?[a-zA-Z0-9_]*/
И проверьте если strlen ($username)> = 4 и <= 32.