【发布时间】:2020-09-17 02:43:57
【问题描述】:
我之前问过questions的相似度,但由于某些原因,我不得不在PySpark中重新实现它。
例如,
app col1
app1 anybody love me?
app2 I hate u
app3 this hat is good
app4 I don't like this one
app5 oh my god
app6 damn you.
app7 such nice girl
app8 xxxxx
app9 pretty prefect
app10 don't love me.
app11 xxx anybody?
我想匹配['anybody', 'love', 'you', 'xxx', 'don't']这样的关键字列表,并选择匹配的关键字结果作为新列,命名关键字如下:
app keyword
app1 [anybody, love]
app4 [don't]
app6 [you]
app8 [xxx]
app10 [don't, love]
app11 [xxx]
作为公认的答案,我可以做的合适方法是创建一个临时数据帧,该数据帧由字符串列表转换,然后 inner join 这两个数据帧一起。
和select条件匹配的app和keyword的行。
-- Hiveql implementation
select t.app, k.keyword
from mytable t
inner join (values ('anybody'), ('you'), ('xxx'), ('don''t')) as k(keyword)
on t.col1 like conca('%', k.keyword, '%')
但是我不熟悉PySpark 并且很难重新实现它。
谁能帮帮我?
提前致谢。
【问题讨论】:
-
在 pyspark 中,您可以轻松编写一个获取 col1 字符串的 UDF,然后它只是简单的 python 代码(拆分字符串)并做您需要的事情。
标签: string apache-spark pyspark apache-spark-sql hiveql