Это решение не совсем то, что вы просили, но, возможно, вы так не думали.Поэтому, пожалуйста, добавляйте комментарии, если они вас не устраивают.
> from pyspark.sql import functions as F
> from pyspark.sql.types import *
> df.show()
+----+-------------+
|col1| col2|
+----+-------------+
| A1|{"x":1,"y":2}|
| A2| {"z":3}|
+----+-------------+
> df.printSchema()
root
|-- col1: string (nullable = true)
|-- col2: string (nullable = true)
> df = df.withColumn(
.. "col2",
.. F.from_json("col2", MapType(StringType(),IntegerType()))
..)
> df.show()
+----+----------------+
|col1| col2|
+----+----------------+
| A1|[x -> 1, y -> 2]|
| A2| [z -> 3]|
+----+----------------+
> df.select(
.. "col1",
.. "col2.x",
.. "col2.y",
.. "col2.z",
..).show()
+----+----+----+----+
|col1| x| y| z|
+----+----+----+----+
| A1| 1| 2|null|
| A2|null|null| 3|
+----+----+----+----+