Pyspark:基于Regex创建额外的列

l7wslrjt  于 2022-10-07  发布在  Spark
关注(0)|答案(1)|浏览(114)

我最近创办了Pyspark,我正在努力找出正则表达式匹配的问题。

对于正则表达式,我已经创建了一个列表,如果在名称列中找到列表中的这些项之一,则添加的列必须为真。此正则表达式匹配不能区分大小写,如下例所示。

我有一个表格,格式如下:
Seqno|名称

1|约翰·琼斯
2|约翰·琼斯
3|约翰·斯通
4|玛丽·怀尔德
5|威廉·沃特
6|史蒂文·沃特

我需要将上面的表格更改为下表的格式。这只是实际表的一小部分,所以很遗憾,硬编码不会减少它。

Seqno|名称|regex
-|-|
1|John Jones|True
2|John Jones|True
3|John Stones|True
4|Mary Wild|False
5|William Wurt|True
6|Steven Wurt|True

下面是创建表的一部分的代码:

regex_list = [john, wurt]
columns = ['seqno', 'name']
data = [('1', 'john jones'),
        ('2', 'John Jones'),
        ('3', 'John Stones'),
        ('4', 'Mary Wild'),
        ('5', 'William Wurt'),
        ('6', 'steven wurt')]

df = spark.createDataFrame(data=data, schema=columns)

我已经用.isin和.rlike尝试了许多应用程序,但似乎都不能正常工作。如有任何帮助,我们将不胜感激。

提前谢谢!

vddsk6oq

vddsk6oq1#

使用rlike检查列出的正则表达式中是否有类似的名称。测试发生时可以更改列表和列中的大小写代码如下

df.withColumn('regex',upper(col('name')).rlike(('|').join([x.upper() for x in regex_list]))).show()

+-----+------------+-----+
|seqno|        name|regex|
+-----+------------+-----+
|    1|  john jones| true|
|    2|  John Jones| true|
|    3| John Stones| true|
|    4|   Mary Wild|false|
|    5|William Wurt| true|
|    6| steven wurt| true|
+-----+------------+-----+

相关问题