PySpark -从字典中匹配新的列部分正则表达式



我有一个这样的PySpark数据框架:

<表类> B tbody><<tr>1abc_value2abc_value3some_other_value4anything_else

恐怕在PySpark中没有实现的函数可以根据定义的字典提取子字符串;你可能需要使用一些技巧。

在这种情况下,您可以首先创建一个搜索字符串,其中包含要搜索的所有字典键:

keys = list(d.keys())
keys_expr = '|'.join(keys)
keys_expr
# 'abc|some_other|anything'

然后可以使用regexp_extract提取第一个我们在B列中遇到的keys_expr键,如果存在(这就是|运算符的原因)。
最后,可以使用字典d替换新列中的值。

import pyspark.sql.functions as F
df = df
.withColumn('C', F.regexp_extract('B', keys_expr, 0))
.replace(d, subset=['C'])
df.show()
+---+----------------+---+
|  A|               B|  C|
+---+----------------+---+
|  1|       abc_value|  X|
|  2|       abc_value|  X|
|  3|some_other_value|  Y|
|  4|   anything_else|  Z|
+---+----------------+---+

最新更新