如何使用另一列中的一列替换字符串值?

时间:2020-06-17 13:18:04

标签: python-3.x pyspark

如何在另一列中使用一列替换字符串值?

我的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”列?

1 个答案:

答案 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 |
+---------------+----------+--------------+----------+