首页 > 解决方案 > 在 pyspark 数据框中添加行并相应地调整列序列

问题描述

我们有一个如下所示的数据框 DF1

col_name col_seq Hash_enc_ind
美国广播公司 1 0
2 1
3 1
全名 4 1
XYZ 5 0
萨尔 6 1
AAA 7 0

现在我想为 hash_inc_ind =1 的一行添加 2 行并相应地调整 col seq 以使输出类似于

DF1:

col_name col_seq Hash_enc_ind
美国广播公司 1 0
名字_h 2 1
名字_e 3 1
姓氏_h 4 1
姓氏 5 1
全名_h 6 1
全名e 7 1
XYZ 8 0
sal_h 9 1
销售 10 1
AAA 11 0

标签: apache-sparkpyspark

解决方案


您可以分解使用 when 构造的数组:

import pyspark.sql.functions as F

df2 = df.withColumn(
    'col_name', 
    F.expr("explode(transform(case when Hash_enc_ind = 1 then array('_h', '_e') else array('') end, x -> col_name || x))")
)

df2.show()
+------------+-------+------------+
|    col_name|col_seq|Hash_enc_ind|
+------------+-------+------------+
|         abc|      1|           0|
|first_name_h|      2|           1|
|first_name_e|      2|           1|
| last_name_h|      3|           1|
| last_name_e|      3|           1|
| full_name_h|      4|           1|
| full_name_e|      4|           1|
|         XYZ|      5|           0|
|       sal_h|      6|           1|
|       sal_e|      6|           1|
|         AAA|      7|           0|
+------------+-------+------------+

推荐阅读