[英]pyspark count number of underscores in each row of a given column
我正在使用pyspark版本1.5.2。 我有一个带有列“ id”的pyspark 数据框,如下所示:
id
------------
000001_128
000123_1_3
006745_8
000000_9_7
我想计算DF每行中的'_'(下划线)的数量,并执行when操作,以便如果字符串中只有1个下划线,我想将'_1'添加为后缀,否则保留该值照原样。 因此,理想的结果将是:
id | new_id
------------------------
000001_128 | 000001_128_1
000123_1_3 | 000123_1_3
006745_8 | 006745_8_1
000000_9_7 | 000000_9_7
我正在将pyspark.sql.functions用于其他操作。
任何帮助表示赞赏!
from pyspark.sql.functions import udf
@udf(returnType='string')
def fmt(s):
return s if s.count('_')!=1 else f'{s}_1'
df.withColumn('id', fmt(df.id))
这是一种非udf方法:
您可以使用与该答案相同的方法来计算每个id
的_
数,并使用pyspark.sql.functions.when()
检查计数是否等于1。如果是,请使用pyspark.sql.functions.format_string()
来创建new_id
,否则使该列保持不变:
import pyspark.sql.functions as f
df.withColumn(
"new_id",
f.when(
(f.size(f.split("id", "_"))-1) == 1,
f.format_string("%s_1",f.col("id"))
).otherwise(f.col("id"))
).show()
#+----------+------------+
#| id| new_id|
#+----------+------------+
#|000001_128|000001_128_1|
#|000123_1_3| 000123_1_3|
#| 006745_8| 006745_8_1|
#|000000_9_7| 000000_9_7|
#+----------+------------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.