在Spark DataFrame和单词列表之间使用类似ORACLE-LIKE的功能 - Scala

时间:2017-09-05 14:03:13

标签: scala apache-spark

我的要求类似于: LINK

我需要列表中的LIKE类型匹配,而不是直接匹配。即 LIKE 列表

匹配评论
ID,COMMENTS
1,bad is he
2,hell thats good
3,sick !thats hell
4,That was good

List = ('good','horrible','hell')

我想获得像

这样的输出
    ID, COMMENTS,MATCHED_WORD,NUM_OF_MATCHES
    1,bad is he,,
    2,hell thats good,(hell,good),2
    3,sick !thats hell,hell,1
    4,That was good,good,1

简单来说,我需要:(就像我所知,rlike isn匹配列表中的值而不是预期一个字符串)

file.select($"COMMENTS",$"ID").filter($"COMMENTS".rlike(List_ :_*)).show()

我尝试了isin,它可以工作但只匹配整个单词。

file.select($"COMMENTS",$"ID").filter($"COMMENTS".isin(List_ :_*)).show()

当我尝试了大量的搜索时,请帮助或请将任何链接重新指向我!

1 个答案:

答案 0 :(得分:1)

用简单的词语我会使用另一种选择:

val xs = Seq("good", "horrible", "hell")
df.filter($"COMMENTS".rlike(xs.mkString("|"))

否则:

df.filter(xs.foldLeft(lit(false))((acc, x) => acc || $"COMMENTS".rlike(x)))