es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ejecute python_wheel_task utilizando la API de envío de Databricks.

Quería ejecutar la rueda de Python como un trabajo de Spark utilizando el punto de conexión de la API “api/2.0/jobs/runs/submit”, proporcionando el nombre del paquete y el punto de entrada:

{
        'existing_cluster_id': self.cluster_id,
        "python_wheel_task": {
            "package_name": "my.package",
            "entry_point": "my_method"
        },
        "libraries": [
            {"whl": "dbfs:/FileStore/jars/1e023c35_ca3a_42c0_958b_fa308124ccc3/my_lib-0.0.1-py3-none-any.whl"}
        ]

    }

Sin embargo, cuando la solicitud está siendo procesada, Databricks utiliza los comandos “%conda magic” (utilizados para gestionar las dependencias de paquetes de Python dentro del ámbito de un cuaderno usando la sintaxis familiar de pip y conda), los cuales no son compatibles con Databricks Runtime estándar (sólo Databricks Runtime ML v6.4+ lo admite):

Py4JJavaError: Se produjo un error al llamar a t.getCondaEnvState.
: org.apache.spark.SparkException: La magia Conda solo está disponible en Databricks Runtime para Machine Learning.
en com.databricks.backend.daemon.driver.PythonDriverLocal$PythonEntryPointInterfaceImpl.getCondaEnvState(PythonDriverLocal.scala:265)
en sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
en sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
en sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
en java.lang.reflect.Method.invoke(Method.java:498)
en py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
en py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:380)
en py4j.Gateway.invoke(Gateway.java:295)
en py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
en py4j.commands.CallCommand.execute(CallCommand.java:79)
en py4j.GatewayConnection.run(GatewayConnection.java:251)
en java.lang.Thread.run(Thread.java:748)

¿Existe alguna otra opción para ejecutar una rueda de Python además de utilizar “spark_python_task” combinado con el script que importa el punto de entrada de la rueda y lo ejecuta?

Gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay otra opción para ejecutar una rueda (wheel) de Python como un trabajo Spark en Databricks sin usar los comandos mágicos %conda. En lugar de utilizar el punto final api/2.0/jobs/runs/submit con “python_wheel_task”, puedes utilizar el mismo punto final con “spark_python_task” y proporcionar el script que importa el punto de entrada de la rueda y lo ejecuta.

    Aquí tienes un ejemplo de cómo usar “spark_python_task” con un script de Python:

    {
        'existing_cluster_id': self.cluster_id,
        'spark_python_task': {
            'python_file': 'dbfs:/path/to/python/script.py'
        },
        'libraries': [
            {'whl': 'dbfs:/FileStore/jars/1e023c35_ca3a_42c0_958b_fa308124ccc3/my_lib-0.0.1-py3-none-any.whl'}
        ]
    }
    

    En este ejemplo, “python_file” es la ruta al script de Python que importa el punto de entrada del paquete rueda y lo ejecuta. El campo “libraries” se utiliza para especificar la ruta al paquete de rueda de Python.

    Utilizando este enfoque, puedes evitar los comandos mágicos %conda y ejecutar ruedas (wheels) de Python como trabajos Spark en Databricks.

Comments are closed.