Вот пример двух строк в DataFrame:
Код: Выделить всё
+---------------------------------------------------------------------------------------------------+
| column |
+---------------------------------------------------------------------------------------------------+
| [{"_t":"TypeA","id":"123","value":"100","details":{"key1":"val1","key2":"val2"}}] |
| [{"_t":"TypeB","id":"456","extra_field":"info","other_details":{"key3":"val3","key4":"val4"}}] |
+---------------------------------------------------------------------------------------------------+
- Первая строка: содержит объекты JSON с полями _t, id, value и
вложенным объектом сведений. - Вторая строка: содержит объекты JSON с полями
_t, id, extra_field и вложенным объектомother_details.
Вот что я пробовал:
Код: Выделить всё
from pyspark.sql.functions import schema_of_json, from_json, col
json_sample = df.select("column").head()[0] # Sample JSON from the first row
inferred_schema = schema_of_json(json_sample) # Infer schema from the sample
# Convert the column to array type using the inferred schema
df = df.withColumn("column", from_json(col("column"), inferred_schema))
Выведенная схема соответствует только структуре JSON первой строки. В результате строки с разными схемами (например, вторая строка) анализируются неправильно.
Я ищу способ:
Динамически выводить схему для столбца, чтобы обрабатывать все варианты объектов JSON в строках.
Применить выведенную схему, чтобы преобразовать столбец в тип массива без потери данных.
Подробнее здесь: https://stackoverflow.com/questions/792 ... g-in-spark
Мобильная версия