Если структура test_field_1
фиксирована, и вы не против "разбора" поля самостоятельно, вы можете использовать udf для выполнения преобразования:
case class S(S:String)
def toArray: String => Array[S] = _.replaceAll("[\\[\\]]","").split(",").map(s => S(s.trim))
val toArrayUdf = udf(toArray)
val df3 = df2.withColumn("json_data", toArrayUdf(col("test_field_1")))
df3.printSchema()
df3.show(false)
печатает
root
|-- test_field_1: string (nullable = true)
|-- json_data: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- S: string (nullable = true)
+------------------------+------------------------+
|test_field_1 |json_data |
+------------------------+------------------------+
|[[str0], [str1], [str2]]|[[str0], [str1], [str2]]|
+------------------------+------------------------+
Сложная задача - создать второй уровень (element: struct
) структуры. Я использовал класс case S
для создания этой структуры.