首页 > 解决方案 > 从 PySpark 数据框列中过滤掉所有规范化的单词

问题描述

我在 PySpark 数据框中有一列带有标准化文本的句子,如下所示:

{product} {number} {number} 于 {date}购买并退回

规范化文本在 {} 标记中,如 {number} 或 {date}

我需要删除所有规范化的单词,使句子变成这样:

购买并退回

有什么建议么?

开始写,但后来卡住了:

data.filter(data.sentence.contains('{'))

标签: pyspark

解决方案


我认为最简单的方法是在每个字段上使用替换,使用正则表达式捕获 {} 之间的所有内容并将其替换为空字符串。

data = [(1, '{product} {number} {number} was purchased on {date} and 
returned')]
df = spark.createDataFrame(data, ["ix", "string"])
# here I created a new column called new_col replacing everything
# that matches the regular expression with an empty string 
df = df.withColumn('new_col', F.regexp_replace(F.col("string"), "\\{(.*?)\}", ""))
df.show()

输出:

+---+--------------------+--------------------+
| ix|              string|             new_col|
+---+--------------------+--------------------+
|  1|{product} {number...|   was purchased ...|
+---+--------------------+--------------------+

推荐阅读