Compartilhar via


Importar módulos python de pastas git ou arquivos de workspace

Você pode armazenar código Python em pastas Git do Databricks ou em arquivos de workspace e importar esse código Python para o pipeline. Para obter mais informações sobre como trabalhar com módulos em pastas Git e arquivos de workspace, consulte Trabalhar com módulos Python e R.

Para importar um arquivo Python, você tem várias opções:

  • Inclua o módulo Python em seu pipeline, como um arquivo de utilitário. Isso funcionará melhor se o módulo for específico para o pipeline de dados.
  • Adicione um módulo compartilhado ao seu ambiente de pipeline, em qualquer pipeline que precise usá-lo.
  • Importe um módulo em seu workspace diretamente no código-fonte Python, com uma instrução import.

Incluir um módulo python em um pipeline

Você pode criar um módulo python como parte do pipeline. Sua pasta raiz do pipeline é acrescentada automaticamente ao sys.path. Isso permite que você faça referência ao módulo diretamente no código-fonte python do pipeline.

O exemplo a seguir demonstra como criar um módulo em Python na pasta raiz do seu pipeline e como referenciá-lo a partir de um arquivo fonte do Python no arquivo fonte do pipeline.

  1. Abra o pipeline no editor de pipeline.

  2. No navegador de ativos do pipeline à esquerda, clique no ícone Plus.Adicione e escolha Utilitário no menu.

  3. Insira my_utils.py para o Nome.

  4. Deixe o caminho padrão e clique em Criar.

    Isso cria o arquivo my_utils.py na pasta utilities do seu pipeline e cria a pasta utilities, se ela não existir. Os arquivos nesta pasta não são adicionados à fonte de dados do pipeline por padrão, mas estão disponíveis para serem chamados a partir dos .py arquivos que fazem parte do código-fonte.

    Por padrão, o arquivo de utilitário tem uma função de exemplo chamada distance_km() que usa uma distância em milhas e o converte.

  5. Em um arquivo de origem do Python na pasta transformações (você pode criar um escolhendo o ícone Plus.Adicione e, em seguida, selecione Transformação no menu), adicione o seguinte código:

    from utilities import my_utils
    

Agora você pode chamar funções no my_utils a partir desse arquivo Python. Você deve adicionar a instrução import a partir de qualquer arquivo Python que precise chamar funções no módulo.

Adicionar um módulo Python ao seu ambiente de pipeline

Se você quiser compartilhar um módulo python em vários pipelines, poderá salvar o módulo em qualquer lugar em seus arquivos de workspace e referenciá-lo do ambiente de qualquer pipeline que precise usá-lo. Você pode referenciar módulos python que são:

  • Arquivos Python individuais (.py).
  • Projeto Python empacotado como um arquivo Python wheel (.whl).
  • Projeto python desempacotado com um pyproject.toml arquivo (para definir o nome e a versão do projeto).

O exemplo a seguir mostra como adicionar uma dependência a um pipeline.

  1. Abra o pipeline no editor de pipeline.

  2. Clique no ícone Engrenagem.Configurações da barra superior.

  3. Nas configurações do Pipeline, em Ambiente do Pipeline, clique no ícone de lápis.Editar ambiente.

  4. Adicione uma dependência. Por exemplo, para adicionar um arquivo ao seu workspace, você pode adicionar /Volumes/libraries/path/to/python_files/file.py. Para uma roda do Python armazenada em pastas Git, seu caminho pode ser semelhante /Workspace/libraries/path/to/wheel_files/file.whla .

    Você pode adicionar um arquivo sem caminho ou um caminho relativo se ele estiver na pasta raiz do pipeline.

Observação

Você também pode adicionar um caminho a uma pasta compartilhada usando as dependências para permitir que as declarações import em seu código encontrem os módulos que você deseja importar. Por exemplo, -e /Workspace/Users/<user_name>/path/to/add/.

Importar um módulo python usando a instrução import

Você também pode referenciar diretamente um arquivo de workspace no código-fonte do Python.

  • Se o arquivo estiver na utilities pasta do pipeline, você poderá referenciá-lo sem um caminho:

    from utilities import my_module
    
  • Se o arquivo estiver em outro lugar, você poderá importá-lo acrescentando primeiro o caminho do módulo ao sys.path:

    import sys, os
    sys.path.append(os.path.abspath('<module-path>'))
    
    from my_module import *
    
  • Você também pode acrescentar aos arquivos de origem do pipeline sys.path adicionando o caminho para o ambiente de pipeline, conforme descrito na seção anterior.

Exemplo de importação de consultas como módulos do Python

O exemplo a seguir demonstra a importação de consultas de conjunto de dados como módulos Python de arquivos de workspace. Embora este exemplo descreva o uso de arquivos de workspace para armazenar o código-fonte do pipeline, você pode usá-lo com o código-fonte armazenado em uma pasta Git.

Para executar este exemplo, use as seguintes etapas:

  1. Clique no ícone Workspaces.Workspace na barra lateral do workspace do Azure Databricks para abrir o navegador do workspace.

  2. Use o navegador do workspace para selecionar um diretório para os módulos do Python.

  3. Clique no ícone de menu Kebab. Na coluna mais à direita do diretório selecionado e clique em Criar > Arquivo.

  4. Insira um nome para o arquivo, por exemplo, clickstream_raw_module.py. O editor de arquivos é aberto. Para criar um módulo para ler dados de origem em uma tabela, insira o seguinte na janela do editor:

    from pyspark import pipelines as dp
    
    json_path = "/databricks-datasets/wikipedia-datasets/data-001/clickstream/raw-uncompressed-json/2015_2_clickstream.json"
    
    def create_clickstream_raw_table(spark):
      @dp.table
      def clickstream_raw():
        return (
          spark.read.json(json_path)
        )
    
  5. Para criar um módulo que cria uma nova tabela contendo dados preparados, crie um novo arquivo no mesmo diretório, insira um nome para o arquivo, por exemplo, clickstream_prepared_module.pye insira o seguinte na nova janela do editor:

    from clickstream_raw_module import *
    from pyspark import pipelines as dp
    from pyspark.sql.functions import *
    from pyspark.sql.types import *
    
    def create_clickstream_prepared_table(spark):
      create_clickstream_raw_table(spark)
      @dp.table
      @dp.expect("valid_current_page_title", "current_page_title IS NOT NULL")
      @dp.expect_or_fail("valid_count", "click_count > 0")
      def clickstream_prepared():
        return (
          spark.read("clickstream_raw")
            .withColumn("click_count", expr("CAST(n AS INT)"))
            .withColumnRenamed("curr_title", "current_page_title")
            .withColumnRenamed("prev_title", "previous_page_title")
            .select("current_page_title", "click_count", "previous_page_title")
        )
    
  6. Em seguida, crie um arquivo Python na fonte do pipeline. No editor de pipeline, escolha o ícone Plus.Adicione e, em seguida, transformação.

  7. Nomeie seu arquivo e confirme se Python é o idioma padrão.

  8. Clique em Criar.

  9. Insira o código de exemplo a seguir no notebook.

    Observação

    Se o notebook importar módulos ou pacotes de um caminho de arquivos de workspace ou de um caminho de pastas Git diferente do diretório do notebook, você precisará adicionar manualmente o caminho aos arquivos usando sys.path.append().

    Se você estiver importando um arquivo de uma pasta Git, será necessário anexar /Workspace/ ao caminho. Por exemplo, sys.path.append('/Workspace/...'). A omissão /Workspace/ do caminho resulta em um erro.

    Se os módulos ou pacotes forem armazenados no mesmo diretório do notebook, você não precisará acrescentar o caminho manualmente. Você também não precisa acrescentar manualmente o caminho ao importar do diretório raiz de uma pasta Git porque o diretório raiz é acrescentado automaticamente ao caminho.

    import sys, os
    sys.path.append(os.path.abspath('<module-path>'))
    
    from pyspark import pipelines as dp
    from clickstream_prepared_module import *
    from pyspark.sql.functions import *
    from pyspark.sql.types import *
    
    create_clickstream_prepared_table(spark)
    
    @dp.table(
      comment="A table containing the top pages linking to the Apache Spark page."
    )
    def top_spark_referrers():
      return (
        spark.read.table("catalog_name.schema_name.clickstream_prepared")
          .filter(expr("current_page_title == 'Apache_Spark'"))
          .withColumnRenamed("previous_page_title", "referrer")
          .sort(desc("click_count"))
          .select("referrer", "click_count")
          .limit(10)
      )
    

    Substitua <module-path> pelo caminho para o diretório que contém os módulos python a serem importados.

  10. Para executar o pipeline, clique em Executar pipeline.