pyspark - 如何将名称拆分为不同的列
问题描述
如何将全名拆分为 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
解决方案
这应该适用于您的特定情况:
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))"))
)
推荐阅读
- java - 这个关键字在运行时和编译时不同
- php - 使用composer在laravel中安装护照时无法分配内存错误
- jenkins - 当没有更改推送到 GitHub 时,阻止 jenkins 管道阶段失败
- python - pandas 按与第一列的绝对相关性对列进行排序
- visual-studio - 当前使用什么可视化工具
- python - 提取多个 URL - Python
- twilio - Twilio SMS - 我做错了什么?
- batch-file - 根据文件夹名称重命名子文件夹中文件的批处理脚本
- python-3.x - Python3 super 没有初始化 __init__ 属性
- python - 比较下一行值并使用 pandas python 更改当前行值