Json & PySpark – прочитать значение из структуры, которая может быть нулевойPython

Программы на Python
Anonymous
Json & PySpark – прочитать значение из структуры, которая может быть нулевой

Сообщение Anonymous »

У меня есть список файлов .json, содержащих информацию о человеке. Один файл содержит информацию об одном человеке. Я хочу загрузить эти данные в таблицу с помощью pyspark в записной книжке Azure Databricks.
Предположим, файлы построены следующим образом:

Код: Выделить всё

{
"id": 1,
"name": "Homer",
"address": {
"street": "742 Evergreen Terrace"
"city": "Springfield"
}
}
Здесь довольно простой json, который я могу прочитать в фрейме данных с помощью этого кода:

Код: Выделить всё

from pyspark.sql.functions import *

sourcejson = spark.read.json("path/to/json")

df = (
sourcejson.select(
col('id'),
col('name'),
col('address.street').alias('street'),
col('address.city').alias('city')
)
)
что дает ожидаемый результат:

Код: Выделить всё

id | name  | street                | city
1  | Homer | 742 Evergreen Terrace | Springfield
Однако. Проблемы начинаются, когда адрес неизвестен. В этом случае вся структура адреса в json будет нулевой:

Код: Выделить всё

{
"id": 2,
"name": "Ned",
"address": null
}
В приведенном выше примере файла мы не знаем адрес Неда, поэтому у нас есть ноль. Используя предыдущий код, я ожидал бы такого результата:

Код: Выделить всё

id | name | street | city
2  | Ned  | null   | null
однако выполнение кода приводит к ошибке:

Код: Выделить всё

[INVALID_EXTRACT_BASE_FIELD_TYPE] Can't extract a value from "address". Need a complex type [STRUCT, ARRAY, MAP] but got "STRING"
Я понимаю причину ошибки, но не могу найти решения. Есть идеи, как с этим справиться?

Подробнее здесь: https://stackoverflow.com/questions/786 ... ay-be-null

Вернуться в «Python»