我已经定义了一个正则表达式来从一个日志文件中提取主机名:
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)
如何将预定义的正则表达式模式应用于列?
答案 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]+"