Вы можете предоставить свой параметр, отличный от столбца (то есть значение dateEx
), через каррирование в UDF, как показано ниже:
import org.apache.spark.sql.functions._
import scala.util.matching._
val df = spark.createDataFrame(Seq(
(0, "31/10/2018"),
(1, "999/11/2018"),
(2, "02/11/2018"))
).toDF("Id", "col_1")
val dateEx = """^[0-3]?[0-9][-/.][0-1]?[0-9][-/.](19|20)?\d{2}$""".r
def date_match_udf(dateEx: Regex) = udf(
(value: String) => dateEx.unapplySeq(value).isDefined
)
df.withColumn("DMY", date_match_udf(dateEx)($"col_1")).
show
// +---+-----------+-----+
// | Id| col_1| DMY|
// +---+-----------+-----+
// | 0| 31/10/2018| true|
// | 1|999/11/2018|false|
// | 2| 02/11/2018| true|
// +---+-----------+-----+
Однако для того, что вам нужно, вместо UDF я бы порекомендовал использовать встроенные функции Spark, которые обычно работают лучше. Ниже приведен один подход с использованием regexp_extract
:
val dateExStr = """^([0-3]?[0-9][-/.][0-1]?[0-9][-/.](19|20)?\d{2})$"""
df.withColumn("DMY", $"col_1" === regexp_extract($"col_1", dateExStr, 1)).
show