Pular para o conteúdo principal

Transforme tipos de dados complexos

Ao trabalhar com tipos de dados aninhados, o Databricks otimiza certas transformações prontas para uso. Os exemplos de código a seguir demonstram padrões para trabalhar com tipos de dados complexos e aninhados na Databricks.

Notação de pontos para acessar dados aninhados

Você pode usar a notação de pontos (.) para acessar um campo aninhado.

Python
df.select("column_name.nested_field")

Selecione todos os campos aninhados

Use o operador estrela (*) para selecionar todos os campos em um determinado campo.

nota

Isso só descompacta campos aninhados na profundidade especificada.

Python
df.select("column_name.*")

Crie um novo campo aninhado

Use a função struct() para criar um novo campo aninhado.

Python
from pyspark.sql.functions import struct, col

df.select(struct(col("field_to_nest").alias("nested_field")).alias("column_name"))

Aninhe todos os campos em uma coluna

Use o operador estrela (*) para agrupar todos os campos de uma fonte de dados em uma única coluna.

Python
from pyspark.sql.functions import struct

df.select(struct("*").alias("column_name"))

Selecione um campo nomeado de uma coluna aninhada

Use colchetes [] para selecionar campos aninhados de uma coluna.

Python
from pyspark.sql.functions import col

df.select(col("column_name")["field_name"])

Explodir elementos aninhados de um mapa ou matriz

Use a função explode() para descompactar valores das colunas do tipo ARRAY e MAP.

ARRAY as colunas armazenam valores como uma lista. Quando descompactado com explode(), cada valor se torna uma linha na saída.

Python
from pyspark.sql.functions import explode

df.select(explode("array_name").alias("column_name"))

MAP As colunas armazenam valores como par ordenado key-value. Quando descompactado com explode(), cada key se torna uma coluna e os valores se tornam linhas.

Python
from pyspark.sql.functions import explode

df.select(explode("map_name").alias("column1_name", "column2_name"))

Criar uma matriz a partir de uma lista ou conjunto

Use as funções collect_list() ou collect_set() para transformar os valores de uma coluna em uma matriz. collect_list() coleta todos os valores na coluna, enquanto collect_set() coleta somente valores exclusivos.

nota

O Spark não garante a ordem dos itens no array resultante de nenhuma das operações.

Python
from pyspark.sql.functions import collect_list, collect_set

df.select(collect_list("column_name").alias("array_name"))
df.select(collect_set("column_name").alias("set_name"))

Selecionar uma coluna de um mapa em uma matriz

Você também pode usar a notação de pontos (.) para acessar campos em mapas que estão contidos em uma matriz. Isso retorna uma matriz de todos os valores para o campo especificado.

Considere a seguinte estrutura de dados:

JSON
{
"column_name": [
{ "field1": 1, "field2": "a" },
{ "field1": 2, "field2": "b" }
]
}

Você pode retornar os valores de field1 como uma matriz com a seguinte consulta:

Python
df.select("column_name.field1")

Transformar dados aninhados em JSON

Use a função to_json para converter um tipo de dados complexo em JSON.

Python
from pyspark.sql.functions import to_json

df.select(to_json("column_name").alias("json_name"))

Para codificar todo o conteúdo de uma consulta ou DataFrame, combine isso com struct(*).

Python
from pyspark.sql.functions import to_json, struct

df.select(to_json(struct("*")).alias("json_name"))
nota

A Databricks também oferece suporte a to_avro e to_protobuf para transformar tipos de dados complexos para interoperabilidade com sistemas integrados.

Transformar dados JSON em dados complexos

Use a função from_json para converter dados JSON em tipos de dados complexos nativos.

nota

O senhor deve especificar o esquema para os dados JSON.

Python
from pyspark.sql.functions import from_json

schema = "column1 STRING, column2 DOUBLE"

df.select(from_json("json_name", schema).alias("column_name"))

Notebook: transformar tipos de dados complexos

O Notebook a seguir fornece exemplos de como trabalhar com tipos de dados complexos para Python, Scala e SQL.

Transformando tipos de dados complexos Python Notebook

Transformando tipos de dados complexos Scala Notebook

Transformação de tipos de dados complexos SQL Notebook