Transformar tipos de dados complexos
Ao trabalhar com tipos de dados aninhados, o Azure Databricks otimiza determinadas transformações prontas para uso. Os exemplos de código a seguir demonstram padrões para trabalhar com tipos de dados complexos e aninhados no Azure Databricks.
Notação de ponto para acessar dados aninhados
Você pode usar a notação de ponto (.
) para acessar um campo aninhado.
Python
df.select("column_name.nested_field")
SQL
SELECT column_name.nested_field FROM table_name
Selecione todos os campos aninhados
Use o operador de estrela (*
) para selecionar todos os campos em um determinado campo.
Observação
Isso só descompacta campos aninhados na profundidade especificada.
Python
df.select("column_name.*")
SQL
SELECT column_name.* FROM table_name
Criar 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"))
SQL
SELECT struct(field_to_nest AS nested_field) AS column_name FROM table_name
Aninhar todos os campos em uma coluna
Use o operador de estrela (*
) para aninhar todos os campos de uma fonte de dados como uma única coluna.
Python
from pyspark.sql.functions import struct
df.select(struct("*").alias("column_name"))
SQL
SELECT struct(*) AS column_name FROM table_name
Selecione um campo nomeado em 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"])
SQL
SELECT column_name["field_name"] FROM table_name
Explodir elementos aninhados de um mapa ou matriz
Use a função explode()
para desempacotar valores de tipos de colunas ARRAY
e MAP
.
Colunas ARRAY
armazenam valores como uma lista. Quando desempacotado 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"))
SQL
SELECT explode(array_name) AS column_name FROM table_name
Colunas MAP
armazenam valores como pares chave-valor ordenados. Quando desempacotada com explode()
, cada chave 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"))
SQL
SELECT explode(map_name) AS (column1_name, column2_name) FROM table_name
Crie uma matriz a partir de uma lista ou de um 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 apenas valores exclusivos.
Observação
O Spark não garante a ordem dos itens na matriz 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"))
SQL
SELECT collect_list(column_name) AS array_name FROM table_name;
SELECT collect_set(column_name) AS set_name FROM table_name;
Selecione uma coluna de um mapa em uma matriz
Você também pode usar a notação de ponto (.
) para acessar campos em mapas contidos em uma matriz. Isso retorna uma matriz de todos os valores para o campo especificado.
Considere a seguinte estrutura de dados:
{
"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")
SQL
SELECT column_name.field1 FROM table_name
Transforme 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"))
SQL
SELECT to_json(column_name) AS json_name FROM table_name
Para codificar todo o conteúdo de uma consulta ou DataFrame, combine-o com struct(*)
.
Python
from pyspark.sql.functions import to_json, struct
df.select(to_json(struct("*")).alias("json_name"))
SQL
SELECT to_json(struct(*)) AS json_name FROM table_name
Observação
O Azure Databricks também dá suporte a to_avro
e to_protobuf
para transformar tipos de dados complexos para interoperabilidade com sistemas integrados.
Transforme dados JSON em dados complexos
Use a função from_json
para converter dados JSON em tipos de dados complexos nativos.
Observação
Você 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"))
SQL
SELECT from_json(json_name, "column1 STRING, column2 DOUBLE") AS column_name FROM table_name
Notebook: transformar tipos de dados complexos
Os notebooks a seguir fornecem exemplos para trabalhar com tipos de dados complexos para Python, Scala e SQL.