Using Below DataFrame I am getting a Array of Json but Data Type is String, where I am looking for help to convert this String to Array of JSON.
val rawDF = spark.sql("select 1").withColumn("parent_id", lit("Parent_12345")).withColumn("jsonString", lit("""[{"First":{"Info":"ABCD123","Res":"5.2"}},{"Second":{"Info":"ABCD123","Res":"5.2"}},{"Third":{"Info":"ABCD123","Res":"5.2"}}]"""))
rawDF.show(false)
Input and Output DataFrame:
Input DataFrame :
+----------+-------+-----------------------------------------------------------------------------------------------------------------------------------+
|item_id |s_tag |jsonString |
+----------+-------+-----------------------------------------------------------------------------------------------------------------------------------+
|Item_12345|S_12345|[{"First":{"Info":"ABCD123","Res":"5.2"}},{"Second":{"Info":"ABCD123","Res":"5.2"}},{"Third":{"Info":"ABCD123","Res":"5.2"}}] |
+----------+-------+-----------------------------------------------------------------------------------------------------------------------------------+
Output DataFrame :
+----------+-------+-----------------------------------------+
|item_id |s_tag |jsonString |
+----------+-------+-----------------------------------------+
|Item_12345|S_12345|{"First":{"Info":"ABCD123","Res":"5.2"}} |
+----------+-------+-----------------------------------------+
|Item_12345|S_12345|{"Second":{"Info":"ABCD123","Res":"5.2"}}|
+----------+-------+-----------------------------------------+
|Item_12345|S_12345|{"Third":{"Info":"ABCD123","Res":"5.2"}} |
+----------+-------+-----------------------------------------+
Problem Statement :
jsonString is String data but looks like Array of json, I want to cast/convert this column as Array of Json to split into possible number of rows
as output DataFrame.
What I have tried so far :
val jsonArray = udf((value: String) => new JSONArray(value)) // Or how to convert as Array of json.
val strToJsonArray = rawDF.withColumn("arrJson", jsonArray(rawDF("jsonString"))).drop("jsonString") //This is not working.
//If We can convert To Array then using below code I can Split the Json Column in expected Output.
val splittedDF = strToJsonArray.withColumn("splittedJson", explode(strToJsonArray.col("arrJson"))).drop("arrJson")
How do I covert my String to an Array of JSON values?