Compartir a través de


Integración de OneLake con Azure Databricks

En este escenario se muestra cómo conectarse a OneLake mediante Azure Databricks. Después de completar este tutorial, podrá leer y escribir en un "lakehouse" de Microsoft Fabric desde el área de trabajo de Azure Databricks.

Prerrequisitos

Antes de conectarse, debe tener:

  • Un área de trabajo de Fabric y lakehouse.
  • Un área de trabajo premium de Azure Databricks. Solo las áreas de trabajo premium de Azure Databricks admiten el traspaso de credenciales de Microsoft Entra, lo cual es necesario para este escenario.

Configuración del área de trabajo de Databricks

  1. Abra el área de trabajo de Azure Databricks y seleccione Crear>clúster.

  2. Para autenticarse en OneLake con la identidad de Microsoft Entra, debe habilitar el acceso directo de credenciales de Azure Data Lake Storage (ADLS) en el clúster en opciones avanzadas.

    Captura de pantalla que muestra dónde seleccionar Crear clúster en la pantalla Opciones avanzadas.

    Nota:

    También puede conectar Databricks a OneLake usando un principal de servicio. Para más información sobre cómo autenticar Azure Databricks mediante una entidad de servicio, consulte Administración de entidades de servicio.

  3. Cree el clúster con los parámetros preferidos. Para más información sobre cómo crear un clúster de Databricks, consulte Configuración de clústeres: Azure Databricks.

  4. Abra un cuaderno y conéctelo al clúster recién creado.

Escribe tu cuaderno

  1. Vaya a su Fabric Lakehouse y copie la ruta del sistema de archivos ABFS de Azure a su lakehouse. Puede encontrarlo en el panel Propiedades .

    Nota:

    Azure Databricks solo admite el controlador Azure Blob Filesystem (ABFS) al leer y escribir en ADLS Gen2 y OneLake: abfss://myWorkspace@onelake.dfs.fabric.microsoft.com/.

  2. Guarde la ruta de acceso a lakehouse en el cuaderno de Databricks. Este lago es donde escribe los datos procesados más adelante:

    oneLakePath = 'abfss://myWorkspace@onelake.dfs.fabric.microsoft.com/myLakehouse.lakehouse/Files/'
    
  3. Cargue datos de un conjunto de datos público de Databricks en un dataframe. También puede leer un archivo desde otro lugar de Fabric o elegir un archivo de otra cuenta de ADLS Gen2 que ya posee.

    yellowTaxiDF = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("/databricks-datasets/nyctaxi/tripdata/yellow/yellow_tripdata_2019-12.csv.gz")
    
  4. Filtre, transforme o prepare los datos. En este escenario, puede reducir el conjunto de datos para una carga más rápida, unirse a otros conjuntos de datos o filtrar por resultados específicos.

    filteredTaxiDF = yellowTaxiDF.where(yellowTaxiDF.fare_amount<4).where(yellowTaxiDF.passenger_count==4)
    display(filteredTaxiDF)
    
  5. Escriba el dataframe filtrado en su Fabric Lakehouse mediante la ruta de OneLake.

    filteredTaxiDF.write.format("csv").option("header", "true").mode("overwrite").csv(oneLakePath)
    
  6. Pruebe que los datos se escribieron correctamente leyendo el archivo recién cargado.

    lakehouseRead = spark.read.format('csv').option("header", "true").load(oneLakePath)
    display(lakehouseRead.limit(10))
    

Esto completa la configuración y ahora puede leer y escribir datos en Fabric mediante Azure Databricks.

Conexión a OneLake mediante la computación sin servidor de Databricks

El proceso sin servidor de Databricks permite ejecutar cargas de trabajo sin aprovisionar un clúster. Según la documentación sin servidor de Databricks, para automatizar la configuración de Spark en un proceso sin servidor, Databricks sin servidor no permite configurar propiedades de Spark fuera de las propiedades admitidas que se enumeran aquí.

Nota:

Esta limitación no es exclusiva de Azure Databricks. Las implementaciones sin servidor de Databricks en Amazon Web Services (AWS) y Google Cloud muestran el mismo comportamiento.

Si intenta modificar o establecer una configuración de Spark no compatible en un cuaderno vinculado a un proceso sin servidor de Databricks, el sistema devuelve un error de CONFIG_NOT_AVAILABLE.

Captura de pantalla que muestra el mensaje de error si un usuario intenta modificar la configuración de Spark no admitida en proceso sin servidor.

OneLake admite la conectividad de entrada desde la computación sin servidor de Databricks. Puede conectarse a OneLake (desde el proceso sin servidor de Databricks) siempre que tenga acceso adecuado y hay una ruta de acceso de red entre el proceso sin servidor de Databricks y OneLake. Con Databricks sin servidor, debe asegurarse de que el código no modifica las propiedades de Spark no admitidas.

Prerrequisitos

Antes de conectarse, debe tener:

  • Un área de trabajo de Fabric y lakehouse.
  • Un área de trabajo premium de Azure Databricks.
  • Una entidad de servicio con una asignación mínima del rol de Colaborador en el área de trabajo.
  • Secretos de base de datos o Azure Key Vault (AKV) para almacenar y recuperar secretos. En este ejemplo se usan secretos de Databricks.

Escribe tu cuaderno

  1. Cree un notebook en el área de trabajo de Databricks y conéctelo a computación sin servidor.

    Captura de pantalla que muestra cómo conectar el cuaderno de Databricks con proceso sin servidor.

  2. Importación de módulos de Python: en este ejemplo, se usan tres módulos:

    • msal es la Biblioteca de autenticación de Microsoft (MSAL) y está diseñada para ayudar a los desarrolladores a integrar la autenticación de la plataforma de identidad de Microsoft en sus aplicaciones.
    • El módulo requests se usa para realizar solicitudes HTTP mediante Python.
    • Delta Lake se usa para leer y escribir tablas de Delta Lake mediante Python.
    from msal import ConfidentialClientApplication
    import requests
    from deltalake import DeltaTable
    
  3. Declarar variables para la instancia de Microsoft Entra que incluye el identificador de la aplicación. Use el identificador de inquilino del inquilino donde se implementa Microsoft Fabric.

    # Fetch from Databricks secrets.
    tenant_id = dbutils.secrets.get(scope="<replace-scope-name>",key="<replace value with key value for tenant _id>")
    client_id = dbutils.secrets.get(scope="<replace-scope-name>",key="<replace value with key value for client _id>") 
    client_secret = dbutils.secrets.get(scope="<replace-scope-name>",key="<replace value with key value for secret>")
    
  4. Declarar variables de área de trabajo de Fabric.

    workspace_id = "<replace with workspace name>"
    lakehouse_id = "<replace with lakehouse name>"
    table_to_read = "<name of lakehouse table to read>"
    storage_account_name = workspace_id
    onelake_uri = f"abfss://{workspace_id}@onelake.dfs.fabric.microsoft.com/{lakehouse_id}.lakehouse/Tables/{table_to_read}"
    
  5. Inicialice el cliente para adquirir el token.

    authority = f"https://login.microsoftonline.com/{tenant_id}"
    
    app = ConfidentialClientApplication(
     client_id,
     authority=authority,
     client_credential=client_secret
     )
    
     result = app.acquire_token_for_client(scopes=["https://onelake.fabric.microsoft.com/.default"])
    
     if "access_token" in result:
       access_token = result["access_token"]
       print("Access token acquired.")
       token_val = result['access_token']
    
  6. Leer una tabla delta de OneLake

    dt = DeltaTable(onelake_uri, storage_options={"bearer_token": f"{token_val}", "use_fabric_endpoint": "true"})
    df = dt.to_pandas()
    print(df.head())
    

    Nota:

    La entidad de servicio tiene la asignación de roles del área de trabajo Colaborador y puede usarla para volver a escribir datos en OneLake.

Esto completa la configuración y ahora puede leer datos de OneLake mediante un cuaderno de Databricks conectado a computación sin servidor.