首页 > 解决方案 > 如何将名称拆分为不同的列

问题描述

如何将全名拆分为 pyspark 中的不同列。

输入 CSV:

Name,Marks
Sam Kumar Timberlake,83
Theo Kumar Biber,82
Tom Kumar Perry,86
Xavier Kumar Cruse,87

输出 CSV 应该是:

FirstName,MiddleName,LastName,Marks
Sam,Kumar,Timberlake,83
Theo,Kumar,Biber,82
Tom,Kumar,Perry,86
Xavier,Kumar,Cruse,87

标签: pysparkpyspark-sqlpyspark-dataframes

解决方案


这应该适用于您的特定情况:

import pyspark.sql.functions as F

df = df.withColumn(
    "arr", F.split(F.col("Name"), " ")
)

df = (
    df
    .withColumn('FirstName', F.arr.getItem(0))
    .withColumn('MiddleName', F.arr.getItem(1))
    .withColumn('LastName', F.arr.getItem(2))
)

如果您想包括某人有多个中间名的情况:

df = (
    df
    .withColumn('FirstName', df.arr.getItem(0))
    .withColumn('LastName', df.arr[F.size(df.arr)-1])
)

df = df.withColumn(
    'MiddleName',
    F.trim(F.expr("substring(Name, length(FirstName)+1, length(Name)-length(LastName)-length(FirstName))"))
)

推荐阅读