发布于2024-11-30 18:00 阅读(367) 评论(0) 点赞(28) 收藏(5)
输入
姓名 |
---|
阿努巴夫·夏尔马 |
拉克什·库马尔·夏尔马 |
穆蒂亚·斯里尼瓦斯·阿塔帕图·穆利达兰 |
实际产量
名 | 中间名字 | 姓 |
---|---|---|
阿努巴夫 | 夏尔马 | |
拉凯什 | 库马尔 | 夏尔马 |
穆蒂亚 | 斯里尼瓦斯 | 阿达帕图 |
预期输出
名 | 中间名字 | 姓 |
---|---|---|
阿努巴夫 | 夏尔马 | |
拉凯什 | 库马尔 | 夏尔马 |
穆蒂亚 | 斯里尼瓦斯·阿塔帕图 | 穆利达兰 |
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)))
问题在于中间名,因为我的代码不正确
您的代码中只考虑了 3 个部分的情况,而显然还有其他您没有处理的情况。您可以根据 aName
可以拥有的部分数量实现以下逻辑:
name_schema = StructType([
StructField("first_name", StringType(), True),
StructField("middle_name", StringType(), True),
StructField("last_name", StringType(), True)
])
@F.udf(returnType=name_schema)
def split_name(name):
parts = name.split()
if len(parts) == 1:
return (parts[0], "", "")
elif len(parts) == 2:
return (parts[0], "", parts[1])
elif len(parts) == 3:
return (parts[0], parts[1], parts[2])
else:
return (parts[0], " ".join(parts[1:-1]), parts[-1])
# Apply the UDF to split names
df = df.withColumn("split_name", split_name("Name"))
df = df.withColumn("first_name", F.col("split_name.first_name")) \
.withColumn("middle_name", F.col("split_name.middle_name")) \
.withColumn("last_name", F.col("split_name.last_name")) \
.drop("split_name")
输出:
+-------------------------------------+----------+-----------------+-----------+
|Name |first_name|middle_name |last_name |
+-------------------------------------+----------+-----------------+-----------+
|Anubhav Sharma |Anubhav | |Sharma |
|Rakesh Kumar Sharma |Rakesh |Kumar |Sharma |
|Muthiah Srinivas attapatu Murlidharan|Muthiah |Srinivas attapatu|Murlidharan|
+-------------------------------------+----------+-----------------+-----------+
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/2046399/b5e3bc9233914dc5a5b5/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!