apache-spark - 在 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 |
解决方案
您可以分解使用 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|
+------------+-------+------------+
推荐阅读
- java - Spring Boot 中的延迟加载
- kubernetes - 无法通过使用来自不同 pod 的 cluster-ip 卷曲进入服务,面临连接超时并退出代码 7
- c# - 如何处理从 C# Npgsql 查询返回的空值?
- mongodb - 如何在 Mongoose DB 中查找布尔值?
- django - 在 CBV 列表视图中创建搜索
- python - 弹性搜索从文档示例中给出错误
- javascript - 如何修复 Firebase 的“Object.keys 不是函数”错误?
- scala - flink 如何将特征反序列化为大小写
- python-3.x - 想了解为什么 switch_to_alert() 收到删除线以及如何修复
- javascript - 有没有办法从 facebook 浏览器 (onClick) 重定向用户,强制 URL 在 chrome 或任何其他浏览器中打开?