【发布时间】:2019-04-04 22:15:45
【问题描述】:
我正在尝试使用 udf 和代表实际正则表达式的附加参数来检查 scala 数据帧的列与正则表达式。
但是,似乎不允许将正则表达式放入lit() 语句中引发以下错误
java.lang.RuntimeException:不支持的文字类型类 scala.util.matching.Regex
使用下面的示例代码。我希望有一个带有布尔条目的附加列“DMY”。
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
import scala.util.matching._
def dateDMY_regex(): Regex = """^[0-3]?[0-9][-/.][0-1]?[0-9][-/.](19|20)?\d{2}$""".r
def date_match(value: String, dateEx: Regex): Boolean = {
return dateEx.unapplySeq(value).isDefined
}
val spark = SparkSession.builder().getOrCreate()
var df = spark.createDataFrame(Seq(
(0, "31/10/2018"),
(1, "01/11/2018"),
(2, "02/11/2018"))).toDF("Id", "col_1")
// to test the function
// print(date_match("31/10/2018", dateDMY_regex()))
val date_match_udf = udf(date_match _) //, lit("c")
df = df.withColumn( "DMY", date_match_udf( $"col_1", lit(dateDMY_regex()) ) )
df.show()
【问题讨论】:
标签: regex scala apache-spark dataframe user-defined-functions