Удаление поля из большой структуры (spark dataframe)
Есть таблица, в полях вложенные структуры <array<struct ...>>
Например:
{
"problems": [{
"Diabetes":[{
"medications":[{
"medicationsClasses":[{
"className":[{
"associatedDrug":[{
"name":"asprin",
"dose":"",
"strength":"500 mg"
}],
"associatedDrug#2":[{
"name":"somethingElse",
"dose":"",
"strength":"500 mg"
}]
}],
"className2":[{
"associatedDrug":[{
"name":"asprin",
"dose":"",
"strength":"500 mg"
}],
"associatedDrug#2":[{
"name":"somethingElse",
"dose":"",
"strength":"500 mg"
}]
}]
}]
}],
"labs":[{
"missing_field": "missing_value"
}]
}],
"Asthma":[{}]
}]}
Необходимо удалить поле problems.Diabetes.medications.medicationsClasses.className.associatedDrug.dose
Аналог: https://stackoverflow.com/questions/32727279/dropping-a-nested-column-from-spark-dataframe
- В Spark >= 3.1 есть функция dropFields, пробовал, не помогло (возможно из-за массивов).
- Пробовал пересобрать структуру, но количество полей (примерно 2500) считаю большим для ручной переделки структуры. И не понятно как такое решение будет в prod работать. (Пока единственное решение)
- Read JSON schema и spark.read.schema(schema).parquet(path) выдаёт ошибку.
- Аналогично п.3 select(from_json(col, schema))
Была идея формировать JSON выходной файл и обрабатывать его различными библиотеками вроде fastjson. Но от решения отказался, т.к. файлов(строк в таблице) много.
Подскажите, может есть ещё какие-то идеи или Вы сталкивались/решали подобный кейс?