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

PySpark code

>>>df.select('i', 'num', F.explode_outer(F.array_distinct('num'))).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|
|  3|           NULL|NULL|
+---+---------------+----+

teradatamlspk code

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

# Explode_outer the nested array
>>> temp_df.select('i', 'num', F.explode_outer('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|
+-+------------+-------------+