Let's suppose your "Subscription parameters" column is ArrayType().
from pyspark.sql import functions as F
from pyspark.sql import Row
from pyspark.context import SparkContext
# Call SparkContext
sc = SparkContext.getOrCreate()
sc = sparkContext
First create the DataFrame
df = sc.createDataFrame([Row(Subscription_id=5516,
Subscription_parameters=["'catchupNotificationsEnabled': True",
"'newsNotificationsEnabled': True", "'autoDownloadsEnabled': False"])])
Split this array into three columns, by simple indexing :
df = df.select("Subscription_id",
F.col("Subscription_parameters")[0].alias("catchupNotificationsEnabled"),
F.col("Subscription_parameters")[1].alias("newsNotificationsEnabled"),
F.col("Subscription_parameters")[2].alias("autoDownloadsEnabled"))
Now your DataFrame is properly split, each new column contains a string such as e.g. "'catchupNotificationsEnabled': True" :
+---------------+---------------------------+------------------------+--------------------+
|Subscription_id|catchupNotificationsEnabled|newsNotificationsEnabled|autoDownloadsEnabled|
+---------------+---------------------------+------------------------+--------------------+
| 5516| 'catchupNotificat...| 'newsNotification...|'autoDownloadsEna...|
+---------------+---------------------------+------------------------+--------------------+
Then I suggest to update column values by checking if it contains "True" or not
df = df.withColumn('catchupNotificationsEnabled',
F.when(F.col("catchupNotificationsEnabled").contains("True"), True).otherwise(False))\
.withColumn('newsNotificationsEnabled',
F.when(F.col("newsNotificationsEnabled").contains("True"), True).otherwise(False))\
.withColumn('autoDownloadsEnabled',
F.when(F.col("autoDownloadsEnabled").contains("True"), True).otherwise(False))
The resulting DataFrame is as expected
+---------------+---------------------------+------------------------+--------------------+
|Subscription_id|catchupNotificationsEnabled|newsNotificationsEnabled|autoDownloadsEnabled|
+---------------+---------------------------+------------------------+--------------------+
| 5516| true| true| false|
+---------------+---------------------------+------------------------+--------------------+
PS: if the column is not of ArrayType() you might have to modify this code a little bit.See this question for example