如何在另一列中使用一列替换字符串值?
我的DataFrame看起来像
Fname,MiddleName,Expected_FName
John D Hoye,D,John Hoye
John D Hoye,空,John D Hoye
John D-Doe Hoye,D-Doe,John Hoye
约翰D,D,约翰
D约翰,D,约翰
JohnD H,D,JohnD H
John Doe Hoy,Doe Hoy,John
基本上,在某些情况下,名字包含中间名中的值。我需要创建一个名字列,其中不包含中间名中的值。 如何在PySpark中创建“ Expected_FName”列?
答案 0 :(得分:0)
您可以使用expr
:
from pyspark.sql import functions
df = spark.createDataFrame([
'John D Hoye,D,John Hoye'.split(','),
['John D Hoye', None, 'John D Hoye'],
'John D-Doe Hoye,D-Doe,John Hoye'.split(','),
'John D,D,John'.split(','),
'D John,D,John'.split(','),
'John Doe Hoy,Doe Hoy,John'.split(',')
], 'Fname,MiddleName,Expected_FName'.split(','))
res = df.withColumn('expected', functions.expr("regexp_replace(Fname, MiddleName, '')")
res.show()
+---------------+----------+--------------+----------+
| Fname|MiddleName|Expected_FName| expected|
+---------------+----------+--------------+----------+
| John D Hoye| D| John Hoye|John Hoye|
| John D Hoye| null| John D Hoye| null|
|John D-Doe Hoye| D-Doe| John Hoye|John Hoye|
| John D| D| John| John |
| D John| D| John| John|
| John Doe Hoy| Doe Hoy| John| John |
+---------------+----------+--------------+----------+