【发布时间】:2016-03-06 11:13:38
【问题描述】:
我是来自 R 背景的 Spark 和 Scala 新手。经过几次 RDD 转换后,我得到了一个类型为 RDD 的 RDD
Description: RDD[(String, Int)]
现在我想在字符串 RDD 上应用正则表达式并从字符串中提取子字符串并在新列中添加子字符串。
输入数据:
BMW 1er Model,278
MINI Cooper Model,248
我正在寻找的输出:
Input | Brand | Series
BMW 1er Model,278, BMW , 1er
MINI Cooper Model ,248 MINI , Cooper
其中 Brand 和 Series 是从 String RDD 新计算的子字符串
到目前为止我做了什么。
我可以使用正则表达式为字符串实现这一点,但我可以应用到所有行。
val brandRegEx = """^.*[Bb][Mm][Ww]+|.[Mm][Ii][Nn][Ii]+.*$""".r //to look for BMW or MINI
那我就可以用了
brandRegEx.findFirstIn("hello this mini is bmW testing")
但是如何将它用于 RDD 的所有行并应用不同的正则表达式来实现如上的输出。
我读到了这段代码 sn-p,但不知道怎么写。
val brandRegEx = """^.*[Bb][Mm][Ww]+|.[Mm][Ii][Nn][Ii]+.*$""".r
def getBrand(Col4: String) : String = Col4 match {
case brandRegEx(str) =>
case _ => ""
return 'substring
}
任何帮助将不胜感激!
谢谢
【问题讨论】:
-
能否详细说明这里的问题是什么?正则表达式、模式匹配或 RDD 转换?
-
@zero323 :抱歉,如果问题不可读。基本上我想使用正则表达式在字符串中进行模式匹配。这是在 Spark-scala RDD 中。
标签: regex scala apache-spark pattern-matching rdd