scala正则表达式在配对的RDD中

时间:2015-02-17 15:49:04

标签: regex eclipse scala apache-spark

我对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分解为每一行并运行一个没有成功的函数。你会建议最好的方法是什么?

提前致谢

1 个答案:

答案 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保留原始信息并添加正则表达式匹配结果。