我对Scala / Eclipse / Spark中的RDD操作中的正则表达式有疑问。
我有2个数据文件,我已经解析,并连接在一起形成一个配对[URL RegexOfURL]的RDD,它们看起来像
(http://coach.nationalexpress.com/nxbooking/journey-list,
(^https://www\.nationalexpress\.com/bps/confirmation\.cfm\?id=|^https://coach\.nationalexpress\.com/nxbooking/delivery-details))
我希望运行一个操作,使每个URL(第一部分)与正则表达式(第二部分)匹配。如果RegEx匹配,则将其标记为true标志,否则将其标记为false
我试过写一个函数:
def operation(s1:RDD[String], s2:RDD[String]) =
s1 match{
case s2 => 't'
case _ => 'f'
}
但匹配不是我想要的,我想正确使用正则表达式,并且遇到了麻烦。
我还尝试将RDD分解为每一行并运行一个没有成功的函数。你会建议最好的方法是什么?
提前致谢
答案 0 :(得分:1)
鉴于输入数据是成对(string, regex)
的RDD,regex
处于String
形式:RDD[(String,String)]
,那么此转换应如下所示:
val urlMatchRegexRdd = urlRegexPairsRDD.map{case (url, regex) => url match {
regex.r(_ *) => ((url, regex), true)
_ => ((url, regex), false)
}
这将导致RDD[((String, String),Boolean)]
形式的RDD保留原始信息并添加正则表达式匹配结果。