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

Open notebook in new tab

Transformando tipos de dados complexos Scala Notebook

Open notebook in new tab

Transformação de tipos de dados complexos SQL Notebook

Open notebook in new tab