hai*_*men 5 python regex apache-spark pyspark spark-dataframe
我在火花中有以下命令,
data = sqlContext.sql("select column1, column2, column3 from table_name")
words = sc.textFile("words.txt")
Run Code Online (Sandbox Code Playgroud)
words.txt有一堆单词,数据有三个取自table_name.
现在,每当每个单词的单词模式words.txt出现在三列数据中的任何一列时,我都想过滤掉数据中的行(火花数据帧)。
例如,如果words.txt有字,如gon,如果任何数据的三列包含值bygone,gone等等,我想筛选出该行。
我尝试了以下方法:
data.filter(~data['column1'].like('%gon%') | data['column2'].like('%gon%') | data['column3'].like('%gon%')).toPandas()
Run Code Online (Sandbox Code Playgroud)
这适用于一个词。但我想检查 中的所有单词words.txt并将其删除。有没有办法做到这一点?
我是 PySpark 的新手。任何的意见都将会有帮助。
您可以阅读 中的单词words.txt,并构建一个正则表达式模式,如下所示:
(?s)^(?=.*word1)(?=.*word2)(?=.*word3)
Run Code Online (Sandbox Code Playgroud)
等等,其中(?s)允许.匹配任何符号,^匹配字符串起始位置,然后每次(?=...)向前查找都需要字符串中每个单词的存在。
因此,如果将正则表达式放入 var 中rx,它将如下所示:
data.filter(~data['column1'].rlike(rx) | data['column2'].rlike(rx) | data['column3'].rlike(rx)).toPandas()
Run Code Online (Sandbox Code Playgroud)
其中正则表达式模式传递给与正则表达式rlike类似like但基于正则表达式执行搜索的方法。
| 归档时间: |
|
| 查看次数: |
3212 次 |
| 最近记录: |