我有一个这样的PySpark数据框架:
<表类>
B
tbody><<tr>1 abc_value 2abc_value 3 some_other_value 4anything_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|
+---+----------------+---+