Conceitos Básicos do Oracle Cloud Infrastructure Data Flow

Este tutorial apresenta o Oracle Cloud Infrastructure Data Flow, um serviço que permite executar qualquer Apache Aplicativo Spark em qualquer escala, sem infraestrutura para implantar ou gerenciar.

Se você já usou o Spark antes, vai aproveitar melhor este tutorial, mas nenhum conhecimento prévio do Spark é necessário. Todos os dados e aplicativos Spark foram fornecidos a você. Este tutorial mostra como o serviço Data Flow torna a execução de aplicativos Spark fácil, reproduzível, segura e simples de compartilhar na empresa.

Neste tutorial, você aprenderá:
  1. Como usar o Java para executar ETL em um Aplicativo Data Flow .
  2. Como usar o SparkSQL em um Aplicativo SQL.
  3. Como criar e executar um Aplicativo Python para executar uma tarefa simples de aprendizado de máquina.

Você também pode executar este tutorial usando o script spark-submit da CLI ou usando o script spark-submit e o Java SDK.

Vantagens do Serviço Data Flow
Saiba por que o serviço Data Flow é melhor do que executar seus próprios clusters Spark ou outros Serviços Spark disponíveis no mercado.
  • Ele não tem servidor, o que significa que você não precisa de especialistas para provisionar, aplicar patch, fazer upgrade ou manter clusters Spark. Isso significa que você se concentra no código Spark e nada mais.
  • Ele tem operações e ajustes simples. O acesso à interface do usuário do Spark é seletivo e é controlado pelas políticas de autorização do IAM. Se um usuário reclamar que um job está sendo executado muito devagar, qualquer pessoa com acesso ao comando Executar poderá abrir a interface do usuário do Spark e chegar à causa raiz. O acesso ao Spark History Server é igualmente simples para jobs que já foram concluídos.
  • É ótimo para o processamento em lote. A saída do aplicativo é capturada automaticamente e disponibilizada pelas APIs REST. Você precisa executar um job Spark SQL de quatro horas e carregar os resultados no sistema de gerenciamento de pipeline? No serviço Data Flow, é apenas duas chamadas de API REST.
  • Ele possui controle consolidado. O serviço Data Flow oferece uma view consolidada de todos os aplicativos Spark, quem os executa e quanto consomem. Deseja saber quais aplicativos estão gravando a maioria dos dados e quem os está executando? Basta classificar pela coluna Dados Gravados. Um job está sendo executado por muito tempo? Qualquer pessoa com as permissões corretas do IAM pode ver o job e interrompê-lo.
Exemplo de uma lista de execuções Há uma tabela de nove colunas e três linhas. As colunas são Nome, Idioma, Status, Proprietário, Criado em, Duração, Total de oCPUs, Leitura de Dados, Dados Gravados. As células em todas as três linhas são preenchidas. Os nomes são Exemplo 1 do Tutorial, Exemplo 2 do Tutorial e Exemplo 3 do Tutorial. As linguagens de cada um são Java, Python e SQL, respectivamente. Todos os três têm o Status de Bem-sucedido.

Antes de Começar

Para executar este tutorial com sucesso, você deverá ter Configurado sua Tenancy e poderá Acessar o Serviço Data Flow.

Configurar Sua Tenancy

Antes que o serviço Data Flow possa ser executado, você deve conceder permissões que permitam a captura de log efetiva e o gerenciamento de execução. Consulte a seção Set Up Administration do Data Flow Service Guide e siga as instruções fornecidas.

Acessando o Serviço Data Flow
  1. Na Console, selecione o menu de navegação para exibir a lista de serviços disponíveis.
  2. Selecione Análise e IA.
  3. Em Big Data, selecione Data Flow.
  4. Selecione Aplicativos.

1. ETL com Java

Um exercício para aprender a criar um aplicativo Java no serviço Data Flow

As etapas aqui são para usar a interface de usuário da Console. Você pode concluir este exercício usando o script spark-submit da CLI ou o script spark-submit com Java SDK.

Visão Geral

A primeira etapa mais comum em aplicativos de processamento de dados é obter dados de alguma origem e colocá-los em um formato adequado para relatórios e outras formas de análise. Em um banco de dados, você carregaria um arquivo simples no banco de dados e criaria índices. No Spark, sua primeira etapa é limpar e converter dados de um formato de texto no formato Parquet. Parquet é um formato binário otimizado que suporta leituras eficientes, tornando-o ideal para geração de relatórios e análises. Neste exercício, você pega dados de origem, converte-os em Parquet e depois faz algumas coisas interessantes com eles. O conjunto de dados é o Berlin Airbnb Data, baixado do site da Kaggle sob os termos da licença Creative Commons CC0 1.0 Universal (CC0 1.0) "Public Domain Dedication".

Há uma caixa chamada Dados CSV, Fácil de Ler, Lento. Uma seta flui para uma caixa à direita chamada Parquet, Mais Difícil de Ler, Rápido. Aí, há duas setas, uma para uma caixa chamada Consultas SQL e a outra para uma caixa chamada Aprendizado de Máquina.

Os dados são fornecidos no formato CSV e a primeira etapa é converter esses dados em Parquet e armazená-los no armazenamento de objetos para processamento downstream. Um aplicativo Spark, chamado oow-lab-2019-java-etl-1.0-SNAPSHOT.jar, é fornecido para fazer essa conversão. O objetivo é criar um Aplicativo Data Flow que execute esse aplicativo Spark e execute-o com os parâmetros corretos. Porque você está começando, este exercício o guia passo a passo, e fornece os parâmetros que você precisa. Mais tarde, você mesmo precisará fornecer os parâmetros; portanto, deverá entender o que está digitando e por quê.

Criar o Aplicativo Java

Crie um Aplicativo Java do serviço Data Flow na Console ou com o Spark-submit na linha de comando ou usando o SDK.

Crie o Aplicativo Java na Console

Crie um aplicativo Java no serviço Data Flow por meio da Console.

Criar um Aplicativo do Serviço Data Flow.

  1. Navegue até o serviço Data Flow na Console expandindo o menu de hambúrguer na parte superior esquerda e role até a parte inferior.
  2. Destaque Data Flow e selecione Aplicativos. Selecione um compartimento no qual você deseja que os aplicativos do serviço Data Flow sejam criados. Por fim, selecione Criar Aplicativo. SelectCreate Aplicativo
  3. Selecione Aplicativo Java e informe um nome para o Aplicativo, por exemplo, Tutorial Example 1. A página Aplicativo é exibida com a opção Criar Aplicativo, no lado direito. Na parte superior há uma seção chamada Informações Gerais que contém um campo do texto denominado Nome e o campo do texto chamado Descrição. Em seguida, há uma seção chamada Configuração de recurso na qual dois campos de texto estão visíveis. Na parte inferior estão três botões: Criar, Salvar como pilha e Cancelar.
  4. Role para baixo até Configuração do Recurso. Deixe todos esses valores com seus respectivos padrões. A página Aplicativo é exibida com a opção Criar Aplicativo, no lado direito. A seção Configuração do Recurso está visível. Na parte superior, há uma lista drop-down chamada Versão do Spark. O Spark 3.0.2 está selecionado, mas os sites Spark 2.4.4 e Spark 3.2.1 também estão listados. Abaixo, mas parcialmente oculto pela lista de Versões do Spark, há um campo de texto chamado Selecionar um pool. Em seguida, é um campo de texto chamado Forma do Driver. VM.Standard.E4. Flex está selecionado. Abaixo e parcialmente recortado há uma seção para personalizar o número de OCPUs. Na parte inferior estão três botões: Criar, Salvar como Pilha e Cancelar.
  5. Role para baixo até Configuração do Aplicativo. Configure o aplicativo da seguinte maneira:
    1. URL do Arquivo: é o local do arquivo JAR no armazenamento de objetos. O local deste aplicativo é:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar
    2. Nome da Classe Principal: Os aplicativos Java precisam de um Nome de Classe Principal, que depende do aplicativo. Para este exercício, informe
      convert.Convert
    3. Argumentos: O aplicativo Spark espera dois parâmetros de linha de comando, um para entrada e outro para saída. No campo Argumentos, digite.
      ${input} ${output}
      Você será solicitado a informar valores padrão, e é uma boa ideia inseri-los agora.
    A página Aplicativo exibida com o pull-out Criar Aplicativo na seção Configuração do Aplicativo side.The do lado direito está visível. Na parte superior há uma seção chamada Selecionar um arquivo. Uma caixa de seleção identificada como Enter the file URL manualmente é selecionada. Depois, há um campo de texto chamado URL do Arquivo. Ele é preenchido com o caminho para o arquivo .jar. Abaixo, há um campo de texto chamado Nome da Classe Principal. Ele é preenchido com convert.Convert. Abaixo, há um campo de texto chamado Argumentos. Ele é preenchido com ${input} ${output}.
  6. Os argumentos de entrada e saída são:
    1. Entrada:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv
    2. Saída:
      oci://<yourbucket>@<namespace>/optimized_listings

    Verifique novamente a configuração do Aplicativo para confirmar se ela é semelhante à seguinte: A página Aplicativo é exibida com a opção Criar Aplicativo, no lado direito. A seção Configuração do Aplicativo está visível. Há um campo de texto chamado Argumentos. Ele é preenchido com ${input} ${output}. Abaixo, há campos de texto para Parâmetros. Há dois à esquerda que estão esmaecidos e preenchidos com entrada e saída, respectivamente. Ao lado de cada um, há um campo de texto chamado Valor Padrão, que é preenchido com os respectivos diretórios. Abaixo está uma seção chamada URI de Arquivo.

    Observação

    Personalize o caminho de saída para apontar para um bucket no tenant.
  7. Quando terminar, selecione Criar. Quando o Aplicativo for criado, você o verá na lista Aplicativo.A página Aplicativos. Na lista de aplicativos há um aplicativo. Ele consiste em sete colunas, Nome, Idioma, versão do Spark, Tipo de aplicativo, Proprietário, Criado e Atualizado. O nome contém o Exemplo 1 do Tutorial. A linguagem está definida como Java. A versão do Spark está definida como 3.2.1. O tipo de aplicativo é definido como Batch. Os outros campos são preenchidos de acordo com quem criou o aplicativo, quando ele foi criado e quando foi atualizado pela última Vez (que, nesse caso, é a mesma data e hora que Criado).

Parabéns! Você criou seu primeiro Aplicativo Data Flow. Agora você pode executá-lo.

Criar o Aplicativo Java Usando o Script Spark-Submit e a CLI

Use o script spark-submit e a CLI para criar um Aplicativo Java.

  1. Configurar sua tenancy.
  2. Se você não tiver um bucket no Object Storage no qual possa salvar a entrada e os resultados, crie um bucket com uma estrutura de pasta adequada. Neste exemplo, a estrutura da pasta é /output/tutorial1.
  3. Execute este código:
    oci --profile <profile-name> --auth security_token data-flow run submit \
    --compartment-id <compartment-id> \
    --display-name Tutorial_1_ETL_Java \
    --execute '
        --class convert.Convert 
        --files oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv 
        oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar \
        kaggle_berlin_airbnb_listings_summary.csv oci://<bucket-name>@<namespace-name>/output/tutorial1'
    Se você tiver executado este tutorial antes, exclua o conteúdo do diretório de saída, oci://<bucket-name>@<namespace-name>/output/tutorial1, para evitar que o tutorial falhe.
    Observação

    Para localizar o id do compartimento, no menu de navegação, selecione Identidade e Compartimentos. Os compartimentos disponíveis para você estão listados, incluindo o OCID de cada um.
Criar o Aplicativo Java Usando o Script Spark-Submit e o SDK

Conclua o exercício para criar um aplicativo Java no serviço Data Flow usando o script spark-submit e o Java SDK.

Estes são os arquivos para executar este exercício e estão disponíveis nos seguintes URIs públicos do serviço Object Storage:

  • Arquivos de entrada no formato CSV:
    oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv
  • Arquivo Jar:
    oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar
  1. Crie um bucket no Object Storage no qual você possa salvar a entrada e os resultados.
  2. Execute este código:
    public class Tutorial1 {
     
      String compartmentId = "<your-compartment_id>"; // Might need to change comapartment id
     
      public static void main(String[] ars) throws IOException {
        System.out.println("ETL with JAVA Tutorial");
        new Tutorial1().crateRun();
      }
     
      public void crateRun() throws IOException {
     
        // Authentication Using BOAT config from ~/.oci/config file
        final ConfigFileReader.ConfigFile configFile = ConfigFileReader.parseDefault();
     
        final AuthenticationDetailsProvider provider =
            new ConfigFileAuthenticationDetailsProvider(configFile);
     
        // Creating a Data Flow Client
        DataFlowClient client = new DataFlowClient(provider);
        client.setRegion(Region.US_PHOENIX_1);
        client.setEndpoint("http://<IP_address>:443");   // Might need to change endpoint
     
        // creation of execute String
        String executeString = "--class convert.Convert "
            + "--files oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv "
            + "oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar "
            + "kaggle_berlin_airbnb_listings_summary.csv oci://<bucket_name>@<tenancy_name>/output/tutorial1";
     
        // Create Run details and create run.
        CreateRunDetails runDetails = CreateRunDetails.builder()
            .compartmentId(compartmentId).displayName("Tutorial_1_ETL_with_JAVA").execute(executeString)
            .build();
     
        CreateRunRequest runRequest = CreateRunRequest.builder().createRunDetails(runDetails).build();
        CreateRunResponse response = client.createRun(runRequest);
        GetRunRequest grq = GetRunRequest.builder().opcRequestId(response.getOpcRequestId()).runId(response.getRun().getId()).build();
        GetRunResponse gr = client.getRun(grq);
     
        System.out.println("Run Created!");
     
      }
    }
Executar o Aplicativo Java do Serviço Data Flow

Após a criação de um aplicativo Java, você pode executá-lo.

  1. Se você seguiu as etapas com precisão, tudo o que precisa fazer é destacar seu Aplicativo na lista, selecionar o menu Ações e selecionar Executar.
  2. Você pode personalizar os parâmetros antes de executar o Aplicativo. No seu caso, você digita os valores exatos previamente e pode começar a executar, clicando em Executar. A página Executar Aplicativo Java é exibida no lado direito da página Aplicativos. Na parte superior, há uma lista drop-down chamada Forma do Driver; a opção VM.Standard2.1 (15 GB, 1 OCPU) está selecionada. Veja abaixo uma lista drop-down chamada Forma do Executor; a opção VM.Standard2.1 (15 GB, 1 OCPU) está selecionada. Abaixo, há um campo de texto chamado Número de Executores; ele contém 1. Abaixo, há um campo de texto chamado Argumentos. Ele está esmaecido e contém ${input} ${output}. Abaixo, há dois campos de texto lado a lado para os parâmetros. O primeiro chama-se Nome e está esmaecido, mas contém entrada. O outro chama-se Valor Padrão e contém o diretório de entrada, mas pode ser editado. Há uma barra de rolagem à direita que está na posição superior. Na parte inferior da tela há dois botões, Executar e Cancelar. A opção Executar está prestes a ser clicada.
  3. Enquanto o Aplicativo está sendo executado, você pode opcionalmente carregar a interface do usuário do Spark para monitorar o andamento. No menu Ações para a execução em questão, selecione UI do Spark. A página Aplicativos com o Exemplo 1 do Tutorial, o único aplicativo listado. O menu de kebab no fim da linha da lista foi clicado e exibe Detalhes da View, Editar, Executar, Adicionar Tags, Exibir Tags e Excluir. A interface do usuário do Spark está prestes a ser clicada.

  4. Você é automaticamente redirecionado para a interface do usuário do Apache Spark, que é útil para depuração e ajuste de desempenho.A interface do usuário do Spark com um gráfico de Executores, quando eles foram adicionados ou removidos, e Jobs e quando estão em execução e se eles foram bem-sucedidos ou se falharam. Eles são codificados por cores. Veja a seguir uma tabela de jobs Ativos, de seis colunas. As colunas são ID do Job, Descrição, Submetido, Duração, Estágios: Bem-sucedido/Total e Tarefas (para todos os estágios): Bem-sucedido/Total.
  5. Depois de cerca de um minuto, sua Execução mostra a conclusão bem-sucedida com o Estado Succeeded: A página Execuções exibida com duas execuções, Exemplo 1 do Tutorial e Exemplo 2 do Tutorial, listadas. A tabela de execuções tem nove colunas. Elas são Nome, Linguagem, Status, Proprietário, Criado em, Duração, Total de oCPUs, Leitura de Dados e Dados Gravados. O Status do Exemplo 1 do Tutorial é Bem-sucedido.

  6. Faça drill na Execução para ver detalhes adicionais e role até a parte inferior para ver uma listagem de logs. A parte inferior da página Detalhes da Execução contendo uma seção chamada Logs. Há uma tabela de cinco colunas contendo dois arquivos de log. As colunas são Nome, Tamanho do Arquivo, Origem, Tipo e Criado em. Há um arquivo stdout.log e um arquivo stderr.log. No menu à esquerda, à esquerda da seção Logs, há uma seção chamada Recursos. Ela contém Logs (que é realçado à medida que é selecionado) e Execuções Relacionadas.

  7. Ao selecionar o arquivo spark_application_stdout.log.gz, você vê a saída de log, Conversion was successful: Há uma página em branco, com algum texto na parte superior. O texto é Conversão bem-sucedida.

  8. Você também pode navegar até seu bucket de armazenamento de objetos de saída para confirmar que novos arquivos foram criados. A seção Objetos é exibida. Há três botões, Fazer Upload de Objetos, Restaurar e Excluir. Somente o primeiro está ativo. Abaixo, há uma tabela de quatro colunas, Nome, Tamanho, Status e Criado em. Os objetos disponíveis são listados.

    Esses novos arquivos são usados pelos aplicativos posteriores. Certifique-se de vê-los em seu bucket antes de passar para os próximos exercícios.

2. SparkSQL Simplificado

Neste exercício, você executa um script SQL para definir o perfil básico de um conjunto de dados.

Este exercício usa a saída que você gerou em 1. ETL com Java. Você deve tê-lo concluído com sucesso antes de tentar este.

As etapas aqui são para usar a interface de usuário da Console. Você pode concluir este exercício usando o script spark-submit da CLI ou o script spark-submit com Java SDK.

Visão Geral

Assim como em outros aplicativos do serviço Data Flow, os arquivos SQL são armazenados no armazenamento de objetos e podem ser compartilhados entre muitos usuários SQL. Para ajudar nisso, o Data Flow permite parametrizar scripts SQL e personalizá-los no runtime. Assim como em outros aplicativos, você pode fornecer valores padrão para parâmetros que geralmente servem como dicas valiosas para as pessoas que executam esses scripts.

O script SQL está disponível para uso diretamente no Aplicativo do serviço Data Flow; não é necessário criar uma cópia dele. O script é reproduzido aqui para ilustrar alguns pontos.

Texto de referência do Script SparkSQL:Alguns códigos SparkSQL de amostra.

Destaques importantes:
  1. O script começa criando as tabelas SQL necessárias. Atualmente, o serviço Data Flow não possui um catálogo SQL persistente, portanto, todos os scripts devem começar definindo as tabelas necessárias.
  2. O local da tabela é definido como ${location}. Este é um parâmetro que o usuário precisa fornecer no runtime. Isso dá ao serviço Data Flow a flexibilidade de usar um script para processar vários locais diferentes e compartilhar o código entre diferentes usuários. Para este laboratório, devemos personalizar ${location} para apontar para o local de saída que usamos no Exercício 1
  3. Como veremos, a saída do script SQL é capturada e disponibilizada para nós na Execução.
Criar um Aplicativo SQL
  1. No serviço Data Flow, crie um Aplicativo SQL, selecione SQL como tipo e aceite os recursos padrão. Na página Criar Aplicativo, que abrange o lado direito da página Aplicativos, há uma seção chamada Configuração do Aplicativo. As caixas de seleção, Streaming do Spark e Usar Opções de Submissão do Spark, não estão marcadas. Sob um rótulo chamado Idioma, há quatro botões de opção. SQL está selecionada como a linguagem.
  2. Em Configuração do Aplicativo, configure o Aplicativo SQL da seguinte forma:
    1. URL do Arquivo: é o local do arquivo SQL no armazenamento de objetos. O local deste aplicativo é:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_sparksql_report.sql
    2. Argumentos: O script SQL espera um parâmetro, o local de saída da etapa anterior. Selecione Adicionar Parâmetro e digite um parâmetro chamado location com o valor que você usou como caminho de saída na etapa a, com base no modelo
      oci://[bucket]@[namespace]/optimized_listings

    Quando terminar, certifique-se de que a configuração do Aplicativo seja semelhante à seguinte:

    Na página pull-out Criar Aplicativo que abrange o lado direito da página Aplicativos, a seção Configuração do Aplicativo fica visível. Há uma caixa de seleção, Usar Opções de Submissão do Spark, não marcada. Em Idioma há quatro botões de opção, SQL é selecionado. Há uma seção chamada Selecionar um arquivo. Nela, a caixa de seleção Inserir o URL do arquivo manualmente é marcada. Há uma caixa de texto chamada URL do Arquivo, que contém o link para o arquivo .sql. Abaixo, há duas caixas de texto lado a lado na subseção Parâmetros. O primeiro, chamado Nome, contém o local. O segundo tem o nome Valor e contém o caminho para um diretório.

  3. Personalize o valor do local com um caminho válido em sua tenancy.
Executar um Aplicativo SQL
  1. Salve o Aplicativo e execute-o na lista Aplicativos. A página Aplicações com os dois aplicativos criados até agora neste tutorial, em ordem cronológica inversa. A tabela que lista os aplicativos contém cinco colunas, Nome, Linguagem, Proprietário, Criado em e Atualizado. No final de cada linha, há um menu de kebab. No Exemplo 2 do Tutorial, o menu de kebab foi clicado e as opções são exibidas. Elas são Detalhes da View, Editar, Executar, Adicionar Tags, Exibir Tags e Excluir. A opção Executar está prestes a ser clicada.
  2. Após a conclusão da Execução, abra-a: A página Execuções com os dois aplicativos criados até agora neste tutorial, em ordem cronológica inversa. Cada um teve apenas uma execução. A tabela que lista os aplicativos contém nove colunas, Nome, Linguagem, Status, Proprietário, Criado em, Duração, Total de oCPUs, Leitura de Dados e Dados Gravados. O status doExemplo 2 do Tutorial é Bem-sucedido e as outras células da tabela são preenchidas.
  3. Navegue até os logs da execução: A parte inferior da página Detalhes da Execução. Abaixo dos detalhes há uma seção chamada Logs. Ela lista os arquivos de log disponíveis em uma tabela de cinco colunas. As colunas são Nome, Tamanho do Arquivo, Origem, Tipo e Criado em. Os dois arquivos de log listados são stdout.log e stderr.log. À esquerda há uma pequena seção chamada Recursos. Ela contém dois links, Logs e Recursos. A opção Logs está selecionada.
  4. Abra spark_application_stdout.log.gz e confirme se a saída concorda com a saída abaixo.
    Observação

    Suas linhas podem estar em uma ordem diferente da imagem, mas os valores devem coincidir.
    A saída do arquivo spark_application_stdout.log.gz. Há cinco colunas de dados. As colunas não têm nome e não têm largura consistente. A primeira coluna contém texto, as outras contêm números.
  5. Com base na definição do perfil SQL você pode concluir, neste conjunto de dados, Neukolln tem o menor preço médio de listagem em $ 46,57, enquanto Charlottenburg-Wilmersdorf tem a média mais alta em $ 114,27 (Observação: o conjunto de dados de origem tem preços em USD, em vez de EUR.)

Este exercício mostrou alguns aspectos importantes do serviço Data Flow. Quando um aplicativo SQL está instalado, qualquer pessoa pode executá-lo facilmente sem se preocupar com a capacidade do cluster, acesso e retenção de dados, gerenciamento de credenciais ou outras considerações de segurança. Por exemplo, um analista de negócios pode facilmente usar relatórios baseados no Spark com o serviço Data Flow.

3. Aprendizado de Máquina com o PySpark

Use o PySpark para executar uma tarefa simples de aprendizado de máquina sobre os dados de entrada.

Este exercício usa a saída de 1. ETL com Java como seus dados de entrada. Você deve ter concluído com sucesso o primeiro exercício antes de tentar este. Desta vez, seu objetivo é identificar as melhores ofertas entre as várias listagens do Airbnb usando algoritmos de aprendizado de máquina do Spark.

As etapas aqui são para usar a interface de usuário da Console. Você pode concluir este exercício usando o script spark-submit da CLI ou o script spark-submit com Java SDK.

Visão Geral

Um aplicativo PySpark está disponível para você usar diretamente em seus Aplicativos Data Flow. Você não precisa criar uma cópia.

O texto de referência do script PySpark é fornecido aqui para ilustrar alguns pontos: Exemplo de código PySpark.

Algumas observações deste código:
  1. O script Python espera um argumento de linha de comando (destacado de vermelho). Quando você cria o Aplicativo Data Flow, precisa criar um parâmetro com o qual o usuário define como caminho de entrada.
  2. O script usa a regressão linear para prever um preço por listagem e encontra as melhores ofertas, subtraindo o preço da lista da previsão. O valor mais negativo indica o melhor valor, de acordo com o modelo.
  3. O modelo neste script é simplificado e só considera a metragem quadrada. Em um cenário real, você usaria mais variáveis, como o bairro e outras variáveis de previsão importantes.
Criar um Aplicativo PySpark

Crie um Aplicativo PySpark na Console ou com o script Spark-submit na linha de comando ou usando o SDK.

Aprendizado de Máquina com o PySpark Usando a Console

Crie um aplicativo PySpark no serviço Data Flow usando a Console.

  1. Crie um Aplicativo e selecione o tipo Python.
    Na página pull-out Criar Aplicativo, o Python é selecionado como a linguagem.
  2. Em Configuração do Aplicativo, configure o Aplicativo da seguinte forma:
    1. URL do Arquivo: é o local do arquivo Python no armazenamento de objetos. O local deste aplicativo é:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_pyspark_ml.py
    2. Argumentos: O aplicativo Spark espera dois parâmetros de linha de comando, um para entrada e outro para saída. No campo Argumentos, digite
      ${location}
      . Será solicitado que você forneça um valor padrão. Informe o valor usado como o caminho de saída na etapa a no modelo:
      oci://<bucket>@<namespace>/optimized_listings
  3. Verifique novamente a configuração do Aplicativo e confirme que ela é semelhante à seguinte:
    Na página pull-out Criar Aplicativo que abrange o lado direito da página Aplicativos, a seção Configuração do Aplicativo fica visível. Há uma caixa de seleção chamada Usar Opções de Script Spark-Submit, que não está selecionada. Python está selecionada como a linguagem. Há uma caixa de texto chamada URL do Arquivo, que contém o link para o arquivo .py. Abaixo, há outra caixa de texto, chamada Argumentos, que contém ${location}. Abaixo, há duas caixas de texto lado a lado na subseção Parâmetros. A primeira está esmaecida e contém a localização. A segunda contém o caminho para um diretório.
  4. Personalize o valor do local com um caminho válido na tenancy.
Aprendizado de Máquina com PySpark Usando o Script Spark-Submit e a CLI

Crie um aplicativo PySpark no serviço Data Flow usando o script Spark-submit e a CLI.

  1. Conclua o exercício Criar o Aplicativo Java Usando o Script Spark-Submit e a CLI, antes de executar este exercício. Os resultados são usados neste exercício.
  2. Execute o seguinte código:
    oci --profile <profile-name> --auth security_token data-flow run submit \
    --compartment-id <compartment-id> \
    --display-name Tutorial_3_PySpark_ML \
    --execute '
        oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_pyspark_ml.py 
        oci://<your_bucket>@<namespace-name>/output/tutorial1'
Aprendizado de Máquina com PySpark Usando o Script Spark-Submit e o SDK

Crie um aplicativo PySpark no serviço Data Flow usando o script Spark-submit e o SDK.

  1. Conclua o exercício Criar o Aplicativo Java Usando o Script Spark-Submit e o SDK, antes de tentar este exercício. Os resultados são usados neste exercício.
  2. Execute o seguinte código:
    public class PySParkMLExample {
     
      private static Logger logger = LoggerFactory.getLogger(PySParkMLExample.class);
      String compartmentId = "<compartment-id>"; // need to change comapartment id
     
      public static void main(String[] ars){
        System.out.println("ML_PySpark Tutorial");
        new PySParkMLExample().createRun();
      }
     
      public void createRun(){
     
        ConfigFileReader.ConfigFile configFile = null;
        // Authentication Using config from ~/.oci/config file
        try {
          configFile = ConfigFileReader.parseDefault();
        }catch (IOException ie){
          logger.error("Need to fix the config for Authentication ", ie);
          return;
        }
     
        try {
        AuthenticationDetailsProvider provider =
            new ConfigFileAuthenticationDetailsProvider(configFile);
     
        DataFlowClient client = new DataFlowClient(provider);
        client.setRegion(Region.US_PHOENIX_1);
     
        String executeString = "oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_pyspark_ml.py oci://<bucket-name>@<namespace-name>/output/optimized_listings";
     
        CreateRunResponse response;
     
        CreateRunDetails runDetails = CreateRunDetails.builder()
            .compartmentId(compartmentId).displayName("Tutorial_3_ML_PySpark").execute(executeString)
            .build();
     
        CreateRunRequest runRequest = CreateRunRequest.builder().createRunDetails(runDetails).build();
        CreateRunResponse response = client.createRun(runRequest);
     
        logger.info("Successful run creation for ML_PySpark with OpcRequestID: "+response.getOpcRequestId()
            +" and Run ID: "+response.getRun().getId());
     
        }catch (Exception e){
          logger.error("Exception creating run for ML_PySpark ", e);
        }
     
     
      }
    }
Executar um Aplicativo PySpark
  1. Execute o Aplicativo na lista Aplicativo.A página Aplicativos com os três aplicativos criados neste tutorial, em ordem cronológica inversa. A tabela que lista os aplicativos contém cinco colunas, Nome, Linguagem, Proprietário, Criado em e Atualizado. No final de cada linha, há um menu de kebab. No Exemplo 3 do Tutorial, o menu de kebab foi clicado e as opções são exibidas. Elas são Detalhes da View, Editar, Executar, Adicionar Tags, Exibir Tags e Excluir. A opção Executar está prestes a ser clicada.
  2. Quando a opção Executar for concluída, abra-a e navegue até os logs.A parte inferior da página Detalhes da Execução. Abaixo dos detalhes há uma seção chamada Logs. Ela lista os arquivos de log disponíveis em uma tabela de cinco colunas. As colunas são Nome, Tamanho do Arquivo, Origem, Tipo e Criado em. Os dois arquivos de log listados são stdout.log e stderr.log. À esquerda há uma pequena seção chamada Recursos. Ela contém dois links, Logs e Recursos. A opção Logs está selecionada.

  3. Abra o arquivo spark_application_stdout.log.gz. Sua saída deve ser idêntica à seguinte: A saída do arquivo spark_application_stdout.log.gz. Há uma tabela de seis colunas. As colunas são id, nome, recursos, preço, previsão e valor. Somente as primeiras vinte linhas são exibidas. Todas as células estão preenchidas.
  4. Nessa saída, você vê que o ID 690578 da listagem é a melhor oferta, com um preço previsto de $ 313,70, em comparação com o preço de lista de $ 35,00 com a metragem quadrada listada de 4639 pés quadrados. Se parecer bom demais para ser verdade, o ID exclusivo significa que você pode fazer drill nos dados para entender melhor se esse é realmente o negócio do século. Novamente, um analista de negócios pode consumir facilmente a saída desse algoritmo de aprendizado de máquina para aprofundar a análise.

O Que Vem a Seguir

Agora você pode criar e executar aplicativos Java, Python ou SQL com o serviço Data Flow e explorar os resultados.

O serviço Data Flow trata de todos os detalhes de implantação, shutdown, gerenciamento de logs, segurança e acesso à interface do usuário. Com o serviço Data Flow, você se concentra no desenvolvimento de aplicativos Spark sem se preocupar com a infraestrutura.