【发布时间】:2021-11-04 04:49:10
【问题描述】:
我们有一个 pyspark 数据框,其中有几列包含具有多个值的数组。我们的目标是将这些列的每个值放在几行中,并保留初始的不同列。 所以,从这样的开始:
data = [
("A", ["a", "c"], ["1", "5"]),
("B", ["a", "b"], None),
("C", [], ["1"]),
]
什么:
+---+------+------+
|id |list_a|list_b|
+---+------+------+
|A |[a, c]|[1, 5]|
|B |[a, b]|null |
|C |[] |[1] |
+---+------+------+
我们希望最终拥有:
+---+----+----+
|id |col |col |
+---+----+----+
|A |a |null|
|A |c |null|
|A |null|1 |
|A |null|5 |
|B |a |null|
|B |b |null|
|C |null|1 |
+---+----+----+
我们正在考虑几种方法:
- 为每个值加上一个列指示符,将所有数组合并为一个数组,将其分解并将不同的值重新组织到不同的列中
- 将数据框拆分为多个,每个包含这些数组列之一,分解数组列,然后连接数据框
但所有这些都像肮脏、复杂、容易出错和低效的解决方法。
有没有人知道如何以优雅的方式解决这个问题?
【问题讨论】:
标签: python dataframe apache-spark pyspark apache-spark-sql