Учебное пособие по PySpark: как преобразовать сложный вложенный JSON в StructType в Databricks
sumit kumar
0:00 / 0:00
Учебное пособие по PySpark: как преобразовать сложный вложенный JSON в StructType в Databricks
1 063 просмотра · 10 месяцев назад
sumit kumar
2,02 тыс. подписчиков
1 063 просмотра · 10 месяцев назад
В этом подробном руководстве по PySpark вы изучите передовые практики обработки сложных вложенных JSON-данных в среде Databricks.
Мы рассмотрим реальный сценарий, включающий вложенные структуры (например, данные клиентов, адреса и списки заказов/товаров), и преобразуем этот полуструктурированный JSON-файл в высокоэффективный структурированный DataFrame PySpark.
Что вы изучите:
Определение структурированной схемы: пошаговое руководство по определению точных StructType и ArrayType для глубоко вложенных JSON-данных.
Простой способ (вывод схемы): как использовать встроенную функциональность Databricks/Spark для автоматического вывода схемы из вашего образца JSON-данных.
Парсинг с явной схемой: код Databricks PySpark для загрузки JSON-данных с использованием тщательно определенной схемы для обеспечения надежности производственных конвейеров.
json_data = [
{
"customer_id": 101,
"status": "active",
"name": {"first": "John", "last": "Doe"},
"address": {"street": "123 Elm St", "city": "Springfield", "zip": "62704"},
"orders": [
{
"order_id": "A001",
"amount": 250,
"items": [
{"product": "Laptop", "qty": 1},
{"product": "Mouse", "qty": 2}
]
},
{
"order_id": "A002",
"amount": 150,
"items": [
{"product": "Keyboard", "qty": 1}
]
}
]
},
{
"customer_id": 102,
"status": "active",
"name": {"first": "John1", "last": "Doe1"},
"address": {"street": "123 Elm St", "city": "Springfield", "zip": "62704"},
"orders": [
{
"order_id": "A003",
"amount": 250,
"items": [
{"product": "Laptop", "qty": 1},
{"product": "Mouse", "qty": 2}
]
},
{
"order_id": "A004",
"amount": 150,
"items": [
{"product": "Keyboard", "qty": 1}
]
}
]
}
]
из pyspark.sql import SparkSession
из pyspark.sql.functions import Explode, col
из pyspark.sql.types import StructType, StructField, StringType, IntegerType, ArrayType
schema = StructType([
StructField("customer_id", IntegerType(), True),
StructField("status", StringType(), True),
StructField("name", StructType([
StructField("first", StringType(), True),
StructField("last", StringType(), True)
]), True),
StructField("address", StructType([
StructField("street", StringType(), True),
StructField("city", StringType(), True),
StructField("zip", StringType(), True)
]), True),
StructField("orders", ArrayType(StructType([
StructField("order_id", StringType(), True),
StructField("amount", IntegerType(), True),
StructField("items", ArrayType(StructType([
StructField("product", StringType(), True),
StructField("qty", IntegerType(), True)
])), True)
])), True)
])
Создать DataFrame из JSON со схемой
df = spark.createDataFrame(json_data, schema=schema)