修改字符串列并替换子字符串 pyspark
modify a string column and replace substring pypsark
我有一个 pyspark 数据框,其名称列的示例值如下:
id NAME
---+-------
1 aaa bb c
2 xx yy z
3 abc def
4 qw er
5 jon lee ls G
我必须翻转最右边的部分并在左侧用逗号填充它并删除最右边的子字符串(使用 space 拆分)
预期输出
id NAME
---+-------
1 c, aaa bb
2 z, xx yy
3 def, abc
4 er, qw
5 G, jon lee ls
我能够通过使用以下代码获得最正确的部分并用逗号添加它:
split_col=split(df['NAME'],' ')
df2 = df2.withColumn('NAME_RIGHT',split_col.getItem(F.size(split_col) - 1))
上面一行给出了
NAME_RIGHT
c
z
def
er
我想替换 NAME_RIGHT 中的值,即 NAME 列中最右边的值,我尝试使用下面的代码,但它没有替换任何内容,如何实现?
df3 = df2.withColumn('NEW_NAME', regexp_replace(F.col("NAME"), str(df2.NAME_RIGHT),""))
正则表达式会有点麻烦,我建议改用split
和concat
。
from pyspark.sql import functions as F
(df
.withColumn('n1', F.split('name', ' '))
.withColumn('n2', F.reverse('n1')[0])
.withColumn('n3', F.concat_ws(' ', F.array_except('n1', F.array('n2'))))
.withColumn('n4', F.concat_ws(', ', F.array('n2', 'n3')))
.show()
)
# +---+------------+-----------------+---+----------+-------------+
# | id| name| n1| n2| n3| n4|
# +---+------------+-----------------+---+----------+-------------+
# | 1| aaa bb c| [aaa, bb, c]| c| aaa bb| c, aaa bb|
# | 2| xx yy z| [xx, yy, z]| z| xx yy| z, xx yy|
# | 3| abc def | [abc, def, ]| | abc def| , abc def|
# | 4| qw er| [qw, er]| er| qw| er, qw|
# | 5|jon lee ls G|[jon, lee, ls, G]| G|jon lee ls|G, jon lee ls|
# +---+------------+-----------------+---+----------+-------------+
我有一个 pyspark 数据框,其名称列的示例值如下:
id NAME
---+-------
1 aaa bb c
2 xx yy z
3 abc def
4 qw er
5 jon lee ls G
我必须翻转最右边的部分并在左侧用逗号填充它并删除最右边的子字符串(使用 space 拆分)
预期输出
id NAME
---+-------
1 c, aaa bb
2 z, xx yy
3 def, abc
4 er, qw
5 G, jon lee ls
我能够通过使用以下代码获得最正确的部分并用逗号添加它: split_col=split(df['NAME'],' ') df2 = df2.withColumn('NAME_RIGHT',split_col.getItem(F.size(split_col) - 1))
上面一行给出了
NAME_RIGHT
c
z
def
er
我想替换 NAME_RIGHT 中的值,即 NAME 列中最右边的值,我尝试使用下面的代码,但它没有替换任何内容,如何实现?
df3 = df2.withColumn('NEW_NAME', regexp_replace(F.col("NAME"), str(df2.NAME_RIGHT),""))
正则表达式会有点麻烦,我建议改用split
和concat
。
from pyspark.sql import functions as F
(df
.withColumn('n1', F.split('name', ' '))
.withColumn('n2', F.reverse('n1')[0])
.withColumn('n3', F.concat_ws(' ', F.array_except('n1', F.array('n2'))))
.withColumn('n4', F.concat_ws(', ', F.array('n2', 'n3')))
.show()
)
# +---+------------+-----------------+---+----------+-------------+
# | id| name| n1| n2| n3| n4|
# +---+------------+-----------------+---+----------+-------------+
# | 1| aaa bb c| [aaa, bb, c]| c| aaa bb| c, aaa bb|
# | 2| xx yy z| [xx, yy, z]| z| xx yy| z, xx yy|
# | 3| abc def | [abc, def, ]| | abc def| , abc def|
# | 4| qw er| [qw, er]| er| qw| er, qw|
# | 5|jon lee ls G|[jon, lee, ls, G]| G|jon lee ls|G, jon lee ls|
# +---+------------+-----------------+---+----------+-------------+