Usar um arquivo wheel do Python em um trabalho do Azure Databricks

Um arquivo wheel do Python é uma maneira padrão de empacotar e distribuir os arquivos necessários para executar um aplicativo Python. Usando a tarefa da roda do Python, você pode garantir a instalação rápida e confiável do código Python em seus trabalhos do Azure Databricks. Este artigo fornece um exemplo de criação de um arquivo wheel do Python e um trabalho que executa o aplicativo empacotado no arquivo wheel do Python. Neste exemplo, você vai:

  • Criar os arquivos Python que definem um aplicativo de exemplo.
  • Agrupe os arquivos de exemplo em um arquivo wheel do Python.
  • Crie um trabalho para executar o arquivo wheel do Python.
  • Executará o trabalho e verá os resultados.

Antes de começar

Você precisa dos seguintes itens para concluir este exemplo:

  • Python3

  • Os pacotes wheel e setuptool do Python. Você pode usar pip para instalar esses pacotes. Por exemplo, você pode executar o seguinte comando para instalar esses pacotes:

    pip install wheel setuptools
    

Etapa 1: criar um diretório local para o exemplo

Crie um diretório local para conter o código de exemplo e os artefatos gerados, por exemplo, databricks_wheel_test.

Etapa 2: criar o script Python de exemplo

O exemplo do Python a seguir é um script simples que lê argumentos de entrada e imprime esses argumentos. Copie esse script e salve-o em um caminho chamado my_test_code/__main__.py no diretório que você criou na etapa anterior.

"""
The entry point of the Python Wheel
"""

import sys

def main():
  # This method will print the provided arguments
  print('Hello from my func')
  print('Got arguments:')
  print(sys.argv)

if __name__ == '__main__':
  main()

Etapa 3: criar um arquivo de metadados para o pacote

O arquivo a seguir contém metadados que descrevem o pacote. Salve isso em um caminho chamado my_test_code/__init__.py no diretório que você criou na etapa 1.

__version__ = "0.0.1"
__author__ = "Databricks"

Etapa 4: criar o arquivo wheel do Python

Converter os artefatos do Python em um arquivo wheel do Python requer a especificação de metadados do pacote, como o nome do pacote e os pontos de entrada. O script a seguir define esses metadados.

Observação

O entry_points definido neste script é usado para executar o pacote no fluxo de trabalho do Azure Databricks. Em cada valor em entry_points, o valor anterior = (neste exemplo, run) é o nome do ponto de entrada e é usado para configurar a tarefa de roda do Python.

  1. Salve esse script em um arquivo chamado setup.py na raiz do diretório que você criou na etapa 1:

    from setuptools import setup, find_packages
    
    import my_test_code
    
    setup(
      name='my_test_package',
      version=my_test_code.__version__,
      author=my_test_code.__author__,
      url='https://databricks.com',
      author_email='john.doe@databricks.com',
      description='my test wheel',
      packages=find_packages(include=['my_test_code']),
      entry_points={
        'group_1': 'run=my_test_code.__main__:main'
      },
      install_requires=[
        'setuptools'
      ]
    )
    
  2. Altere para o diretório que você criou na etapa 1 e execute o seguinte comando para empacotar seu código na distribuição de roda do Python:

    python3 setup.py bdist_wheel
    

Este comando cria o arquivo wheel do Python e o salva no arquivo dist/my_test_package-0.0.1-py3.none-any.whl em seu diretório.

Etapa 5. Criar um trabalho do Azure Databricks para executar o arquivo wheel do Python

  1. Vá para a página inicial do Azure Databricks e siga um destes procedimentos:

    • Na barra lateral, clique em Ícone de fluxos de trabalho Fluxos de Trabalho e clique em botão Criar Trabalho.
    • Na barra lateral, clique em ícone Novo Novo e selecione Trabalho no menu.
  2. Na caixa de diálogo da tarefa exibida na guia Tarefas, substitua Adicionar um nome para seu trabalho... com seu nome de trabalho, por exemplo Python wheel example.

  3. Em Nome da tarefa, insira um nome para a tarefa, por exemplo, python_wheel_task.

  4. Em Tipo, selecione Wheel do Python.

  5. Em Nome do pacote, insira my_test_package. O valor de Nome do pacote é o nome do pacote Python a ser importado. Neste exemplo, o nome do pacote é o valor atribuído ao parâmetro name em setup.py.

  6. Em Ponto de entrada, insira run. O ponto de entrada é um dos valores especificados na coleção entry_points no script setup.py. Neste exemplo, run é o único ponto de entrada definido.

  7. Em Computação, selecione um cluster de trabalhos existente ou Adicionar novo grupo de trabalhos.

  8. Clique em Adicionar em Bibliotecas dependentes. Na caixa de diálogo Adicionar biblioteca dependente, com o Espaço de trabalho selecionado, arraste o arquivo my_test_package-0.0.1-py3-none-any.whl criado na etapa 4 para a área Solte o arquivo aqui da caixa de diálogo.

  9. Clique em Adicionar.

  10. Em Parâmetros, selecione Argumentos posicionais ou Argumentos de palavra-chave para inserir a chave e o valor de cada parâmetro. Os argumentos posicionais e de palavra-chave são passados à tarefa de wheel do Python como argumentos de linha de comando.

    • Para inserir argumentos posicionais, insira parâmetros como uma matriz de cadeias de caracteres formatada em JSON, por exemplo: ["first argument","first value","second argument","second value"].
    • Para inserir argumentos de palavra-chave, clique em + Adicionar e insira uma chave e um valor. Clique em + Adicionar novamente para inserir mais argumentos.
  11. Clique em Criar tarefa.

Etapa 6: executar o trabalho e exibir os detalhes da execução do trabalho

Clique no Botão Executar agora para executar o fluxo de trabalho. Para exibir detalhes da execução, clique em Exibir execução no item pop-up da Execução disparada ou clique no link na coluna Hora de início da execução na exibição de execuções de trabalho.

Quando a execução é concluída, a saída é exibida no painel Saída, incluindo os argumentos passados para a tarefa.

Próximas etapas

Para saber mais sobre como criar e executar trabalhos do Azure Databricks, confira Agendar e orquestrar fluxos de trabalho.