>>> df.show()
+---------------+---+
|num            |i  |
+---------------+---+
|[1, 2, 3, NULL]|1  |
|[NULL]         |2  |
|NULL           |3  |
+---------------+---+

PySpark code

>>> df.select('i', 'num', F.explode(F.array_distinct('col'))).show()
+---+---------------+----+
|  i|            num| col|
+---+---------------+----+
|  1|[1, 2, 3, NULL]|   1|
|  1|[1, 2, 3, NULL]|   2|
|  1|[1, 2, 3, NULL]|   3|
|  1|[1, 2, 3, NULL]|NULL|
|  2|         [NULL]|NULL|
+---+---------------+----+

teadatamlspk code

# Derive distinct array
>>> temp_df = df.withColumn("distinct_numbers", F.array_distinct(F.col("num")))

# Explode the nested array
>>> temp_df.select('i', 'num', F.explode('distinct_numbers')).show()
+-+------------+-------------+
|i|         num|exploded_col1|
+-+------------+-------------+
|1|(1,2,3,NULL)|            2|
|1|(1,2,3,NULL)|         None|
|1|(1,2,3,NULL)|            3|
|1|(1,2,3,NULL)|            1|
|2|      (NULL)|         None|
+-+------------+-------------+