如何在Spark DataFrame中应用预定义的正则表达式模式?

时间:2019-04-12 05:04:56

标签: regex scala apache-spark dataframe apache-spark-sql

我已经定义了一个正则表达式来从一个日志文件中提取主机名:

val host = "[a-zA-Z0-9]+\.[a-zA-Z]+\.[a-zA-Z]+".r

但是当我尝试在spark数据框中应用此模式时,会引发错误:

df.withColumn(col("hostname"),regexp_extract("value",host,1)).show(5) 

错误:

  

:28:错误:类型不匹配;找到:scala.util.matching.Regex必需:字符串df.withColumn(col(“ hostname”),regexp_extract(“ value”,host,1))。show(5)

如何将预定义的正则表达式模式应用于列?

1 个答案:

答案 0 :(得分:2)

在错误中,您输入了“ type mismatch;类型:发现scala.util.matching.Regex:字符串”。 host变量的类型为Regex,而Spar kfucntion regexp_extract需要一个字符串。

要解决此问题,只需在创建.r时删除host即可将变量保留为字符串:

val host = "[a-zA-Z0-9]+\.[a-zA-Z]+\.[a-zA-Z]+"