【发布时间】:2018-03-16 20:37:34
【问题描述】:
我来自 R 背景。我可以在 R 中的 Dataframe col 上实现模式搜索。但现在很难在 spark scala 中做到这一点。任何帮助将不胜感激
问题陈述被分解成细节只是为了恰当地描述它 东风:
Case Freq
135322 265
183201,135322 36
135322,135322 18
135322,121200 11
121200,135322 8
112107,112107 7
183201,135322,135322 4
112107,135322,183201,121200,80000 2
我正在寻找模式搜索 UDF,它会返回模式的所有匹配项,然后从第二列返回对应的 Freq 值。
示例:对于模式135322,我想找出第一个 col Case 中的所有匹配项。它应该从 Freq col 返回相应的 Freq 编号。
赞265,36,18,11,8,4,2
对于模式112107,112107,它应该只返回7,因为有一个匹配模式。
这就是最终结果的样子
Case Freq results
135322 265 256+36+18+11+8+4+2
183201,135322 36 36+4+2
135322,135322 18 18+4
135322,121200 11 11+2
121200,135322 8 8+2
112107,112107 7 7
183201,135322,135322 4 4
112107,135322,183201,121200,80000 2 2
到目前为止我尝试了什么:
val text= DF.select("case").collect().map(_.getString(0)).mkString("|")
//search function for pattern search
val valsum = udf((txt: String, pattern : String)=> {
txt.split("\\|").count(_.contains(pattern))
} )
//apply the UDF on the first col
val dfValSum = DF.withColumn("results", valsum( lit(text),DF("case")))
【问题讨论】:
标签: regex scala apache-spark