Tutorial: Extrair, transformar e carregar dados usando o Azure Databricks
Neste tutorial, você executa uma operação ETL (extrair, transformar e carregar dados) usando o Azure Databricks. Você extrai dados do Azure Data Lake Storage Gen2 para o Azure Databricks, executa transformações nos dados no Azure Databricks e carrega os dados transformados no Azure Synapse Analytics.
As etapas neste tutorial usam o conector Azure Synapse para Azure Databricks para transferir dados para o Azure Databricks. Esse conector, por sua vez, usa o Armazenamento de Blobs do Azure como armazenamento temporário para os dados que estão sendo transferidos entre um cluster do Azure Databricks e o Azure Synapse.
A ilustração seguinte mostra o fluxo da aplicação:
Este tutorial abrange as seguintes tarefas:
- Crie um serviço Azure Databricks.
- Crie um cluster do Spark no Azure Databricks.
- Crie um sistema de arquivos na conta do Data Lake Storage Gen2.
- Carregue dados de exemplo para a conta do Azure Data Lake Storage Gen2.
- Crie uma entidade de serviço.
- Extraia dados da conta do Azure Data Lake Storage Gen2.
- Transforme dados no Azure Databricks.
- Carregue dados no Azure Synapse.
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Nota
Este tutorial não pode ser realizado usando a Assinatura de Avaliação Gratuita do Azure. Se tiver uma conta gratuita, aceda ao seu perfil e altere a sua subscrição para pagamento consoante a utilização. Para obter mais informações, veja Conta gratuita do Azure. Em seguida, remova o limite de gastos e solicite um aumento de quota para vCPUs na sua região. Ao criar seu espaço de trabalho do Azure Databricks, você pode selecionar a camada de preço de Avaliação (Premium - DBUs gratuitas de 14 dias) para dar ao espaço de trabalho acesso a DBUs Premium Databricks Premium gratuitas por 14 dias.
Pré-requisitos
Conclua estas tarefas antes de começar este tutorial:
Crie uma Sinapse do Azure, crie uma regra de firewall no nível do servidor e conecte-se ao servidor como administrador do servidor. Consulte Guia de início rápido: criar e consultar um pool SQL Synapse usando o portal do Azure.
Crie uma chave mestra para o Azure Synapse. Consulte Criar uma chave mestra de banco de dados.
Crie uma conta de armazenamento de Blobs do Azure e um contentor no mesmo. Obtenha também a chave de acesso para aceder à conta de armazenamento. Consulte Guia de início rápido: carregar, baixar e listar blobs com o portal do Azure.
Crie uma conta de armazenamento do Azure Data Lake Storage Gen2. Consulte Guia de início rápido: criar uma conta de armazenamento do Azure Data Lake Storage Gen2.
Crie uma entidade de serviço. Consulte Como: Usar o portal para criar um aplicativo Microsoft Entra ID (anteriormente Azure Ative Directory) e entidade de serviço que pode acessar recursos.
Há algumas coisas específicas que você terá que fazer ao executar as etapas nesse artigo.
Ao executar as etapas na seção Atribuir o aplicativo a uma função do artigo, certifique-se de atribuir a função de Colaborador de Dados de Blob de Armazenamento à entidade de serviço no escopo da conta do Data Lake Storage Gen2. Se você atribuir a função ao grupo de recursos pai ou à assinatura, receberá erros relacionados a permissões até que essas atribuições de função se propaguem para a conta de armazenamento.
Se preferir usar uma lista de controle de acesso (ACL) para associar a entidade de serviço a um arquivo ou diretório específico, consulte Controle de acesso no Azure Data Lake Storage Gen2.
Ao executar as etapas na seção Obter valores para entrar do artigo, cole a ID do locatário, a ID do aplicativo e os valores secretos em um arquivo de texto.
Inicie sessão no portal do Azure.
Reúna as informações de que precisa
Certifique-se de concluir os pré-requisitos deste tutorial.
Antes de começar, você deve ter estes itens de informação:
✔️ O nome do banco de dados, o nome do servidor de banco de dados, o nome de usuário e a senha do seu Azure Synapse.
✔️ A chave de acesso da sua conta de armazenamento de blob.
✔️ O nome da sua conta de armazenamento Data Lake Storage Gen2.
✔️ O ID do inquilino da sua subscrição.
✔️ A ID do aplicativo que você registrou com a ID do Microsoft Entra (anteriormente Azure Ative Directory).
✔️ A chave de autenticação para o aplicativo que você registrou com o Microsoft Entra ID (anteriormente Azure Ative Directory).
Criar um serviço Azure Databricks
Nesta seção, você cria um serviço Azure Databricks usando o portal do Azure.
No menu do portal do Azure, selecione Criar um recurso.
Em seguida, selecione Analytics>Azure Databricks.
Em Serviço Azure Databricks, forneça os seguintes valores para criar um serviço Databricks:
Property Description Nome da área de trabalho Indique um nome para a sua área de trabalho do Databricks. Subscrição Na lista pendente, selecione a sua subscrição do Azure. Grupo de recursos Especifique se quer criar um novo grupo de recursos ou utilizar um existente. Um grupo de recursos é um contentor que mantém recursos relacionados para uma solução do Azure. Para obter mais informações, veja Descrição geral do Grupo de Recursos do Azure. Localização Selecione E.U.A. Oeste 2. Para outras regiões disponíveis, veja Serviços do Azure disponíveis por região. Escalão de Preço selecione Standard. A criação da conta demora alguns minutos. Para monitorar o status da operação, visualize a barra de progresso na parte superior.
Selecione Afixar ao dashboard e, em seguida, selecione Criar.
Criar um cluster do Spark no Azure Databricks
No portal do Azure, vá para o serviço Databricks que você criou e selecione Iniciar Espaço de Trabalho.
Você será redirecionado para o portal do Azure Databricks. No portal, selecione Cluster.
Na página Novo cluster, indique os valores para criar um cluster.
Preencha os valores para os campos seguintes e aceite os valores predefinidos para os outros campos:
Introduza um nome para o cluster.
Certifique-se de marcar a caixa de seleção Encerrar após __ minutos de inatividade . Se o cluster não estiver sendo usado, forneça uma duração (em minutos) para encerrar o cluster.
Selecione Criar cluster. Depois que o cluster estiver em execução, você poderá anexar blocos de anotações ao cluster e executar trabalhos do Spark.
Criar um sistema de arquivos na conta do Azure Data Lake Storage Gen2
Nesta seção, você cria um bloco de anotações no espaço de trabalho do Azure Databricks e executa trechos de código para configurar a conta de armazenamento
No portal do Azure, vá para o serviço Azure Databricks que você criou e selecione Iniciar Espaço de Trabalho.
À esquerda, selecione Espaço de trabalho. No menu pendente Área de Trabalho, selecione Criar>Bloco de Notas.
Na caixa de diálogo Criar Bloco de Notas, introduza um nome para o bloco de notas. Selecione Scala como a linguagem e selecione o cluster do Spark que criou anteriormente.
Selecione Criar.
O bloco de código a seguir define as credenciais da entidade de serviço padrão para qualquer conta ADLS Gen 2 acessada na sessão do Spark. O segundo bloco de código acrescenta o nome da conta à configuração para especificar credenciais para uma conta ADLS Gen 2 específica. Copie e cole qualquer bloco de código na primeira célula do seu bloco de anotações do Azure Databricks.
Configuração da sessão
val appID = "<appID>" val secret = "<secret>" val tenantID = "<tenant-id>" spark.conf.set("fs.azure.account.auth.type", "OAuth") spark.conf.set("fs.azure.account.oauth.provider.type", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider") spark.conf.set("fs.azure.account.oauth2.client.id", "<appID>") spark.conf.set("fs.azure.account.oauth2.client.secret", "<secret>") spark.conf.set("fs.azure.account.oauth2.client.endpoint", "https://login.microsoftonline.com/<tenant-id>/oauth2/token") spark.conf.set("fs.azure.createRemoteFileSystemDuringInitialization", "true")
Account configuration (Configuração da conta)
val storageAccountName = "<storage-account-name>" val appID = "<app-id>" val secret = "<secret>" val fileSystemName = "<file-system-name>" val tenantID = "<tenant-id>" spark.conf.set("fs.azure.account.auth.type." + storageAccountName + ".dfs.core.windows.net", "OAuth") spark.conf.set("fs.azure.account.oauth.provider.type." + storageAccountName + ".dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider") spark.conf.set("fs.azure.account.oauth2.client.id." + storageAccountName + ".dfs.core.windows.net", "" + appID + "") spark.conf.set("fs.azure.account.oauth2.client.secret." + storageAccountName + ".dfs.core.windows.net", "" + secret + "") spark.conf.set("fs.azure.account.oauth2.client.endpoint." + storageAccountName + ".dfs.core.windows.net", "https://login.microsoftonline.com/" + tenantID + "/oauth2/token") spark.conf.set("fs.azure.createRemoteFileSystemDuringInitialization", "true") dbutils.fs.ls("abfss://" + fileSystemName + "@" + storageAccountName + ".dfs.core.windows.net/") spark.conf.set("fs.azure.createRemoteFileSystemDuringInitialization", "false")
Neste bloco de código, substitua os valores ,
<secret>
,<tenant-id>
e<storage-account-name>
de espaço reservado neste bloco de código pelos valores que você coletou ao concluir os<app-id>
pré-requisitos deste tutorial. Substitua o valor do espaço reservado<file-system-name>
pelo nome que você deseja dar ao sistema de arquivos.O
<app-id>
, e<secret>
são do aplicativo que você registrou com o Ative Directory como parte da criação de uma entidade de serviço.O
<tenant-id>
é da sua assinatura.O
<storage-account-name>
é o nome da sua conta de armazenamento do Azure Data Lake Storage Gen2.
Pressione as teclas SHIFT + ENTER para executar o código neste bloco.
Ingerir dados de exemplo na conta do Azure Data Lake Storage Gen2
Antes de começar esta secção, tem de satisfazer os seguintes pré-requisitos:
Introduza o seguinte código numa célula do bloco de notas:
%sh wget -P /tmp https://raw.githubusercontent.com/Azure/usql/master/Examples/Samples/Data/json/radiowebsite/small_radio_json.json
Na célula, pressione SHIFT + ENTER para executar o código.
Agora, em uma nova célula abaixo desta, insira o seguinte código e substitua os valores que aparecem entre colchetes pelos mesmos valores que você usou anteriormente:
dbutils.fs.cp("file:///tmp/small_radio_json.json", "abfss://" + fileSystemName + "@" + storageAccountName + ".dfs.core.windows.net/")
Na célula, pressione SHIFT + ENTER para executar o código.
Extrair dados da conta do Azure Data Lake Storage Gen2
Agora você pode carregar o arquivo json de exemplo como um quadro de dados no Azure Databricks. Cole o código a seguir em uma nova célula. Substitua os espaços reservados mostrados entre colchetes pelos seus valores.
val df = spark.read.json("abfss://" + fileSystemName + "@" + storageAccountName + ".dfs.core.windows.net/small_radio_json.json")
Pressione as teclas SHIFT + ENTER para executar o código neste bloco.
Execute o seguinte código para ver o conteúdo do quadro de dados:
df.show()
Verá um resultado semelhante ao seguinte fragmento:
+---------------------+---------+---------+------+-------------+----------+---------+-------+--------------------+------+--------+-------------+---------+--------------------+------+-------------+------+ | artist| auth|firstName|gender|itemInSession| lastName| length| level| location|method| page| registration|sessionId| song|status| ts|userId| +---------------------+---------+---------+------+-------------+----------+---------+-------+--------------------+------+--------+-------------+---------+--------------------+------+-------------+------+ | El Arrebato |Logged In| Annalyse| F| 2|Montgomery|234.57914| free | Killeen-Temple, TX| PUT|NextSong|1384448062332| 1879|Quiero Quererte Q...| 200|1409318650332| 309| | Creedence Clearwa...|Logged In| Dylann| M| 9| Thomas|340.87138| paid | Anchorage, AK| PUT|NextSong|1400723739332| 10| Born To Move| 200|1409318653332| 11| | Gorillaz |Logged In| Liam| M| 11| Watts|246.17751| paid |New York-Newark-J...| PUT|NextSong|1406279422332| 2047| DARE| 200|1409318685332| 201| ... ...
Os dados foram agora extraídos do Armazenamento do Azure Data Lake Ger2 para o Azure Databricks.
Transformar dados no Azure Databricks
Os dados de amostra brutos small_radio_json.json arquivo capturam a audiência de uma estação de rádio e tem uma variedade de colunas. Nesta seção, você transforma os dados para recuperar apenas colunas específicas do conjunto de dados.
Primeiro, recupere apenas as colunas firstName, lastName, gender, location e level do dataframe que você criou.
val specificColumnsDf = df.select("firstname", "lastname", "gender", "location", "level") specificColumnsDf.show()
Você recebe a saída conforme mostrado no seguinte trecho:
+---------+----------+------+--------------------+-----+ |firstname| lastname|gender| location|level| +---------+----------+------+--------------------+-----+ | Annalyse|Montgomery| F| Killeen-Temple, TX| free| | Dylann| Thomas| M| Anchorage, AK| paid| | Liam| Watts| M|New York-Newark-J...| paid| | Tess| Townsend| F|Nashville-Davidso...| free| | Margaux| Smith| F|Atlanta-Sandy Spr...| free| | Alan| Morse| M|Chicago-Napervill...| paid| |Gabriella| Shelton| F|San Jose-Sunnyval...| free| | Elijah| Williams| M|Detroit-Warren-De...| paid| | Margaux| Smith| F|Atlanta-Sandy Spr...| free| | Tess| Townsend| F|Nashville-Davidso...| free| | Alan| Morse| M|Chicago-Napervill...| paid| | Liam| Watts| M|New York-Newark-J...| paid| | Liam| Watts| M|New York-Newark-J...| paid| | Dylann| Thomas| M| Anchorage, AK| paid| | Alan| Morse| M|Chicago-Napervill...| paid| | Elijah| Williams| M|Detroit-Warren-De...| paid| | Margaux| Smith| F|Atlanta-Sandy Spr...| free| | Alan| Morse| M|Chicago-Napervill...| paid| | Dylann| Thomas| M| Anchorage, AK| paid| | Margaux| Smith| F|Atlanta-Sandy Spr...| free| +---------+----------+------+--------------------+-----+
Pode transformar mais os dados para mudar o nome da coluna level para subscription_type.
val renamedColumnsDF = specificColumnsDf.withColumnRenamed("level", "subscription_type") renamedColumnsDF.show()
Você recebe a saída conforme mostrado no trecho a seguir.
+---------+----------+------+--------------------+-----------------+ |firstname| lastname|gender| location|subscription_type| +---------+----------+------+--------------------+-----------------+ | Annalyse|Montgomery| F| Killeen-Temple, TX| free| | Dylann| Thomas| M| Anchorage, AK| paid| | Liam| Watts| M|New York-Newark-J...| paid| | Tess| Townsend| F|Nashville-Davidso...| free| | Margaux| Smith| F|Atlanta-Sandy Spr...| free| | Alan| Morse| M|Chicago-Napervill...| paid| |Gabriella| Shelton| F|San Jose-Sunnyval...| free| | Elijah| Williams| M|Detroit-Warren-De...| paid| | Margaux| Smith| F|Atlanta-Sandy Spr...| free| | Tess| Townsend| F|Nashville-Davidso...| free| | Alan| Morse| M|Chicago-Napervill...| paid| | Liam| Watts| M|New York-Newark-J...| paid| | Liam| Watts| M|New York-Newark-J...| paid| | Dylann| Thomas| M| Anchorage, AK| paid| | Alan| Morse| M|Chicago-Napervill...| paid| | Elijah| Williams| M|Detroit-Warren-De...| paid| | Margaux| Smith| F|Atlanta-Sandy Spr...| free| | Alan| Morse| M|Chicago-Napervill...| paid| | Dylann| Thomas| M| Anchorage, AK| paid| | Margaux| Smith| F|Atlanta-Sandy Spr...| free| +---------+----------+------+--------------------+-----------------+
Carregar dados no Azure Synapse
Nesta seção, você carrega os dados transformados no Azure Synapse. Use o conector do Azure Synapse para Azure Databricks para carregar diretamente um dataframe como uma tabela em um pool do Synapse Spark.
Como mencionado anteriormente, o conector do Azure Synapse usa o armazenamento de Blob do Azure como armazenamento temporário para carregar dados entre o Azure Databricks e o Azure Synapse. Assim, comece por indicar a configuração para ligar à conta de armazenamento. Você já deve ter criado a conta como parte dos pré-requisitos para este artigo.
Indique a configuração para aceder à conta de Armazenamento do Azure a partir do Azure Databricks.
val blobStorage = "<blob-storage-account-name>.blob.core.windows.net" val blobContainer = "<blob-container-name>" val blobAccessKey = "<access-key>"
Especifique uma pasta temporária para usar ao mover dados entre o Azure Databricks e o Azure Synapse.
val tempDir = "wasbs://" + blobContainer + "@" + blobStorage +"/tempDirs"
Execute o seguinte fragmento para armazenar as chaves de acesso do armazenamento de Blobs do Azure na configuração. Esta ação garante que não tem de manter a chave de acesso no bloco de notas em texto simples.
val acntInfo = "fs.azure.account.key."+ blobStorage sc.hadoopConfiguration.set(acntInfo, blobAccessKey)
Forneça os valores para se conectar à instância do Azure Synapse. Você deve ter criado um serviço do Azure Synapse Analytics como pré-requisito. Use o nome do servidor totalmente qualificado para dwServer. Por exemplo,
<servername>.database.windows.net
.//Azure Synapse related settings val dwDatabase = "<database-name>" val dwServer = "<database-server-name>" val dwUser = "<user-name>" val dwPass = "<password>" val dwJdbcPort = "1433" val dwJdbcExtraOptions = "encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;" val sqlDwUrl = "jdbc:sqlserver://" + dwServer + ":" + dwJdbcPort + ";database=" + dwDatabase + ";user=" + dwUser+";password=" + dwPass + ";$dwJdbcExtraOptions" val sqlDwUrlSmall = "jdbc:sqlserver://" + dwServer + ":" + dwJdbcPort + ";database=" + dwDatabase + ";user=" + dwUser+";password=" + dwPass
Execute o seguinte trecho para carregar o dataframe transformado, renamedColumnsDF, como uma tabela no Azure Synapse. Este fragmento cria uma tabela chamada SampleTable na base de dados SQL.
spark.conf.set( "spark.sql.parquet.writeLegacyFormat", "true") renamedColumnsDF.write.format("com.databricks.spark.sqldw").option("url", sqlDwUrlSmall).option("dbtable", "SampleTable") .option( "forward_spark_azure_storage_credentials","True").option("tempdir", tempDir).mode("overwrite").save()
Nota
Este exemplo usa o sinalizador, que faz com que o
forward_spark_azure_storage_credentials
Azure Synapse acesse dados do armazenamento de blob usando uma chave de acesso. Este é o único método de autenticação suportado.Se o seu Armazenamento de Blobs do Azure estiver restrito a redes virtuais selecionadas, o Azure Synapse exigirá Identidade de Serviço Gerenciado em vez de Chaves de Acesso. Isso causará o erro "Esta solicitação não está autorizada a executar esta operação".
Conecte-se ao banco de dados SQL e verifique se você vê um banco de dados chamado SampleTable.
Execute uma consulta select para verificar os conteúdos da tabela. A tabela deve ter os mesmos dados que o dataframe renamedColumnsDF .
Clean up resources (Limpar recursos)
Depois de concluir o tutorial, você pode encerrar o cluster. No espaço de trabalho do Azure Databricks, selecione Clusters à esquerda. Para que o cluster termine, em Ações, aponte para as reticências (...) e selecione o ícone Encerrar .
Se você não encerrar manualmente o cluster, ele será interrompido automaticamente, desde que você marque a caixa de seleção Encerrar após __ minutos de inatividade quando você criou o cluster. Nesse caso, o cluster para automaticamente se estiver inativo durante o tempo especificado.
Próximos passos
Neste tutorial, ficou a saber como:
- Criar um serviço Azure Databricks
- Criar um cluster do Spark no Azure Databricks
- Criar um bloco de notas no Azure Databricks
- Extrair dados de uma conta do Data Lake Storage Gen2
- Transformar dados no Azure Databricks
- Carregar dados no Azure Synapse