python - 从 RDD 中的单词过滤 Spark 数据框中的行

标签 python regex apache-spark pyspark spark-dataframe

我在 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 之类的词,并且如果数据的三列中的任何一列包含值作为 bygonegone 等,我想过滤掉那一行。

我试过以下方法:

data.filter(~data['column1'].like('%gon%') | data['column2'].like('%gon%') | data['column3'].like('%gon%')).toPandas()

这适用于一个词。但我想检查 words.txt 中的所有单词并将其删除。有办法做到这一点吗?

我是 PySpark 的新手。任何建议都会有所帮助。

最佳答案

您可以从 words.txt 中读取单词,并像这样构建一个正则表达式模式:

(?s)^(?=.*word1)(?=.*word2)(?=.*word3)

等其中(?s) 允许. 匹配任何 符号,^ 匹配字符串开始位置然后每个(?=...) 前瞻要求字符串中存在每个单词。

因此,如果您将正则表达式放入 rx 变量中,它将如下所示:

data.filter(~data['column1'].rlike(rx) | data['column2'].rlike(rx) | data['column3'].rlike(rx)).toPandas()

其中正则表达式模式被传递给 rlike 方法,该方法类似于 like 但基于正则表达式执行搜索。

关于python - 从 RDD 中的单词过滤 Spark 数据框中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39068065/

相关文章:

python - 您如何拥有不同的 View 来为 Pyramid 中的不同内容类型提供服务?

c# - 检索(验证)字符串的一部分

c++在 bool 模式下搜索文本

python - 如何在 IBM 的 Spark 服务上列出预装的 Python 包

Python/Q# : Module not found error, 与 .qs 文件在同一目录中

python - 带有 GPIO.setup 和 GPIO.cleanup 的 RuntimeWarnings 不适用于 KeyboardInterrupt

python - 无法在 urllib.request 中使用 https 代理

java - 正则表达式 - 获取两个字符串之间的文本

apache-spark - 如何在 PySpark 中使用 foreach 或 foreachBatch 写入数据库?

java - 如何使用单个 Spark 上下文在 Apache Spark 中运行并发作业(操作)