【发布时间】:2016-12-28 07:52:19
【问题描述】:
我在 spark 中有以下命令,
data = sqlContext.sql("select column1, column2, column3 from table_name")
words = sc.textFile("words.txt")
words.txt 有一堆单词,数据有三个字符串列,取自table_name。
现在,每当words.txt 中的每个单词的单词模式出现在三列数据中的任何一列中时,我都想过滤掉数据中的行(spark 数据帧)。
例如,如果words.txt 有诸如gon 之类的词,并且如果三列数据中的任何一列包含bygone、gone 等值,我想过滤掉该行。
我尝试了以下方法:
data.filter(~data['column1'].like('%gon%') | data['column2'].like('%gon%') | data['column3'].like('%gon%')).toPandas()
这适用于一个词。但我想检查words.txt 中的所有单词并将其删除。有没有办法做到这一点?
我是 PySpark 的新手。任何建议都会有所帮助。
【问题讨论】:
-
如果你可以使用正则表达式,你可以构建一个类似
(?s)^(?=.*gon)(?=.*tap)(?=.*wrap)等的模式(注意这个正则表达式在 Python 和 Java 中的工作方式相同)来要求所有这些词在任何字符串中都存在。 -
@WiktorStribiżew 如果您想提供答案,可以在此处将
like替换为rlike。
标签: python regex apache-spark pyspark spark-dataframe