Pyspark 如何将名称拆分为不同的列
如何在pyspark中将全名拆分为不同的列 输入CSV:Pyspark 如何将名称拆分为不同的列,pyspark,pyspark-sql,pyspark-dataframes,Pyspark,Pyspark Sql,Pyspark Dataframes,如何在pyspark中将全名拆分为不同的列 输入CSV: Name,Marks Sam Kumar Timberlake,83 Theo Kumar Biber,82 Tom Kumar Perry,86 Xavier Kumar Cruse,87 FirstName,MiddleName,LastName,Marks Sam,Kumar,Timberlake,83 Theo,Kumar,Biber,82 Tom,Kumar,Perry,86 Xavier,Kumar,Cruse,87 输出
Name,Marks
Sam Kumar Timberlake,83
Theo Kumar Biber,82
Tom Kumar Perry,86
Xavier Kumar Cruse,87
FirstName,MiddleName,LastName,Marks
Sam,Kumar,Timberlake,83
Theo,Kumar,Biber,82
Tom,Kumar,Perry,86
Xavier,Kumar,Cruse,87
输出Csv应为:
Name,Marks
Sam Kumar Timberlake,83
Theo Kumar Biber,82
Tom Kumar Perry,86
Xavier Kumar Cruse,87
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))"))
)
这应适用于您的具体情况:
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))"))
)
有分裂的规则吗?实际上,在您的示例中,
firstName
然后是MiddleName
然后是LastName
,这就像规则一样简单。是否有拆分规则?实际上,在您的示例中,firstName
然后是MiddleName
然后是LastName
,这一点很简单。