pyspark - 修改字符串列并替换子字符串 pypsark
问题描述
我有一个 pyspark 数据框,其名称列的示例值如下:
id NAME
---+-------
1 aaa bb c
2 xx yy z
3 abc def
4 qw er
5 jon lee ls G
我必须翻转最右边的部分并在左侧用逗号填充它并删除最右边的子字符串(使用空格分割)
预期产出
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
andconcat
代替。
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|
# +---+------------+-----------------+---+----------+-------------+
推荐阅读
- c++ - 使用指向数组的指针填充动态数组
- php - 缺少 Stripe 3D 安全授权弹出窗口
- javascript - 如何在 React 中对状态变化的 span 元素进行动画处理?
- arrays - ReDim 上的 2D 数组下标超出范围
- javascript - React - 无效的钩子调用。Hooks 只能在函数组件的主体内部调用
- react-native - React Native - 当列表不是时返回未定义
- java - 我使用 JDBC 更新数据,但它不起作用
- java - 如何使用 Java 中的 set 识别唯一的整数列表
- jwt - 为什么这个 JWT 有意想不到的价值?
- html - 如何在图像上显示文本并在溢出时向上流动该文本?