如何处理pyspark中的转义字符。当数据框中的列值为 ' ' 时,尝试用 NULL 替换转义字符

问题描述 投票:0回答:1

如何处理 pyspark 中的转义字符。尝试用 NULL 替换转义字符

' ' 随机分布在所有列中,我已将所有列中的 ' ' 替换为 NULL

下面是我的示例输入数据

col1,col2,col3,Col4    
1,\026\026,abcd026efg,1|\026\026|abcd026efg            
2,\026\026,\026\026\026,2|026\026|\026\026\026         
3,ad026eg,\026\026,3|ad026eg|\026\026       
4,ad026eg,xyad026,4|ad026eg|xyad026  

而且,我的输出数据应该是

col1|col2|col3|col4|      
1,NULL,abcd026efg,1||abcd026efg|   
2,NULL,NULL,2|NULL|NULL|   
3,ad026eg,NULL,3|ad026eg|NULL|       
4,ad026eg,xyad026,4|ad026eg|xyad026|

注意:Col4 是 col1、col2、col3 的组合列,并带有 |分隔

 df.withColumn('col2',F.regexp_replace('col2','\D\d+',None)).show().
 This is working but it is replacing all the cell values with NULL.
pyspark apache-spark-sql stringescapeutils
1个回答
0
投票

如果你想在 rdd 中执行此操作,请尝试此操作:

rddd = df.rdd.map(
    lambda x: [re.sub(r"\\026", "", x[i].strip()) for i in range(len(x))]
).map(lambda x: [None if x[i] == "" else x[i].strip() for i in range(len(x))])

df2=rddd.toDF(["a","b","c","d"])

df2.show()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.