【发布时间】:2020-05-29 04:07:18
【问题描述】:
我目前有一个带有 id 和列的数据框,该列是结构数组:
root
|-- id: string (nullable = true)
|-- lists: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- _1: string (nullable = true)
| | |-- _2: string (nullable = true)
这是一个包含数据的示例表:
id | list1 | list2
------------------------------------------
1 | [[a, av], [b, bv]]| [[e, ev], [f,fv]]
2 | [[c, cv]] | [[g,gv]]
如何将上面的数据框转换为下面的数据框?我需要“分解”数组并根据结构中的第一个值添加列。
id | a | b | c | d | e | f | g
----------------------------------------
1 | av | bv | null| null| ev | fv | null
2 | null| null| cv | null|null|null|gv
创建数据框的pyspark代码如下:
d1 = spark.createDataFrame([("1", [("a","av"),("b","bv")], [("e", "ev"), ("f", "fv")]), \
("2", [("c", "cv")], [("g", "gv")])], ["id","list1","list2"])
注意:我有 2.2.0 的 spark 版本,所以一些 sql 函数不起作用,例如 concat_map 等。
【问题讨论】:
-
可以发数组吗?
-
@SachinthaNayanajith 我添加了 pyspark 代码
-
使用 inline 或 inline_outer 展开结构数组
-
@murtihash 嘿,你能提供使用 inline/inline_outer 的示例吗?无法弄清楚..
标签: python apache-spark pyspark apache-spark-sql