Aller au contenu principal

Mettez à jour les Job lorsque vous mettez à niveau les Workspace hérités vers Unity Catalog

Lorsque vous mettez à niveau les Workspaces hérités vers Unity Catalog, vous devrez peut-être mettre à jour les jobs existants pour référencer les tables et chemins de fichiers mis à niveau. Le tableau principal de cette page répertorie les scénarios et les suggestions typiques pour la mise à jour de vos Jobs. Les scénarios qui nécessitent des exemples de code renvoient à la section Scénarios détaillés.

Pour une démonstration de la mise à jour des Jobs vers Unity Catalog, consultez Mise à niveau d'un Job vers Unity Catalog.

Vue d'ensemble des scénarios

Scénario

Solutions

Le Job utilise des bibliothèques personnalisées via un script d'initialisation ou des bibliothèques définies par le cluster.

Une bibliothèque personnalisée serait définie comme un pip package ou JAR non disponible publiquement qui effectue des Opérations de lecture ou d'écriture Apache Spark ou SQL intégrées dans son code.

Modifiez la bibliothèque personnalisée pour vous assurer que :

  • Les noms de base de données utilisent un espace de noms à trois niveaux.
  • Les points de montage ne sont pas utilisés dans le code.

Un Job lit ou écrit dans une table du Hive metastore.

  • Évaluer la configuration du catalogue default dans le cluster de Job de la configuration Spark : spark.databricks.sql.initial.catalog.name my_catalog
  • Évaluez si le catalogue default du workspace peut être défini sur une valeur autre que hive_metastore afin que le code du Job n'ait pas à être modifié.
  • Sinon, modifiez le code de job pour renommer les espaces de noms à deux niveaux en espaces de noms à trois niveaux de la table appropriée.
  • Si le Job utilise du SQL pur, envisagez d'ajouter une instruction USE CATALOG.

Le Job lit ou écrit dans des chemins qui sont des sous-dossiers de tables (non pris en charge dans Unity Catalog).

  • Modifiez le code pour lire à partir de la table avec un prédicat sur la colonne de partition.
  • Modifiez le code pour écrire dans la table avec overwriteByPartition ou une autre option appropriée.

Le Job lit ou écrit dans des chemins de montage qui sont des tables Unity Catalog.

  • Modifiez le code pour faire référence à la table en espace de noms à trois niveaux correcte.
  • Si la table n'est pas enregistrée, ou ne le sera pas, le code doit quand même être modifié pour écrire dans un chemin de volume au lieu d'un chemin de montage.

Le Job lit ou écrit des fichiers (pas des tables) en utilisant des chemins de montage.

Modifiez le code pour écrire à la place dans un emplacement de volume.

Job est un job de streaming qui utilise applyInPandasWithState.

Non pris en charge actuellement. Envisagez de réécrire si possible, ou n'essayez pas de refactoriser ce Job tant qu'aucun support n'est fourni.

Le Job est un Job de streaming qui utilise le mode de traitement continu.

Le mode de traitement continu est expérimental dans Spark et n'est pas pris en charge dans Unity Catalog. Refactorisez le Job pour utiliser le streaming structuré. Si cela n'est pas possible, envisagez de maintenir le job en cours d'exécution par rapport à Hive Metastore.

Le Job est un job de streaming qui utilise des répertoires de points de contrôle.

  • Déplacer les répertoires de points de contrôle vers les volumes.
  • Modifiez le code dans le notebook pour utiliser un chemin de volume.
  • Le propriétaire du job devrait avoir les droits de lecture-écriture sur ce chemin.
  • Arrêter le job.
  • Déplacer le point de contrôle vers le nouvel emplacement de volume.
  • Redémarrer le Job.

Le Job a une définition de cluster inférieure à Databricks Runtime 11,3.

  • Modifiez la définition du cluster de Job en Databricks Runtime 11,3 ou version ultérieure.
  • Modifiez la définition du cluster de Job pour utiliser un mode d'accès désigné ou standard.

Le Job contient des Notebooks qui interagissent avec le stockage ou les tables.

Le Service Principal avec lequel le Job a été exécuté doit disposer d'un accès en lecture et en écriture aux Ressources requises dans Unity Catalog, telles que les volumes, les tables, les emplacements externes, etc.

Job est un pipeline LakeFlow.

  • Faites passer le cluster de Job à Databricks Runtime 13,1 ou version ultérieure.
  • Arrêter le Job de pipeline LakeFlow.
  • Déplacez les données vers une table gérée par Unity Catalog.
  • Modifiez la définition de Job du Lakeflow pipeline pour utiliser la nouvelle table gérée Unity Catalog.
  • Redémarrer le Lakeflow pipeline job.

Job utilise des services cloud non liés au stockage (tels qu'AWS Kinesis) avec un profil d'instance pour l'authentification.

Modifiez le code pour utiliser les identifiants de service Unity Catalog, qui régissent les identifiants capables d'interagir avec les services cloud non liés au stockage en générant des identifiants temporaires utilisables par les SDK.

Job utilise Scala.

  • Si la version de Databricks Runtime est inférieure à 13.3, exécutez sur un compute dédié.
  • Les clusters standard sont pris en charge sur Databricks Runtime 13.3 et versions ultérieures.

Le Job contient des Notebooks qui utilisent des UDF Scala.

  • Si la version de Databricks Runtime est inférieure à 13.3, exécutez sur un compute dédié.
  • Les clusters Standard sont pris en charge sur Databricks Runtime 14.2.

Le Job a des tâches qui utilisent MLR.

Exécutez sur un compute dédié.

Le Job possède une configuration de clusters qui repose sur des scripts d’initialisation globaux.

  • Utilisez Databricks Runtime 13.3 ou une version ultérieure pour un support complet.
  • Modifiez pour utiliser des scripts d'initialisation étendus au cluster ou des stratégies de cluster. Les scripts, fichiers et packages doivent être installés sur les volumes Unity Catalog pour l'exécution.

Le Job utilise des fichiers JAR/Maven, des extensions Spark ou des sources de données personnalisées (à partir de Spark).

  • Utilisez Databricks Runtime 13.3 ou une version ultérieure.
  • Utilisez des politiques de cluster pour installer des bibliothèques.

Le Job contient des Notebooks avec des UDF PySpark.

Utilisez Databricks Runtime 13,2 ou une version ultérieure.

Le Job contient des Notebooks avec du code Python qui effectue des appels réseau.

Utilisez Databricks Runtime 12.2 ou une version ultérieure.

Le Job contient des Notebooks avec des UDF Pandas (scalaires).

Utilisez Databricks Runtime 13,2 ou une version ultérieure.

Job utilisera les volumes Unity Catalog.

Utilisez Databricks Runtime 13.3 ou une version ultérieure.

Le Job utilise spark.catalog.X (tableExists, listTables, setDefaultCatalog) sur un cluster partagé.

Voir les notebooks Job utilisent spark.catalog.X sur un cluster partagé.

Le Job utilise dbutils...getContext().toJson() sur un cluster partagé.

Utilisez .safeToJson() au lieu de .toJson() lors de l'accès au contexte de commande (par exemple, pour récupérer un ID de Job). Ceci fournit un sous-ensemble d'informations qui peuvent être partagées en toute sécurité sur un cluster partagé.

Nécessite Databricks Runtime 13.3 LTS+

Le Job utilise spark.udf.registerJavaFunction sur un cluster partagé.

  • Utilisez Databricks Runtime 14.3 LTS ou une version ultérieure.
  • Pour les Notebooks et les Jobs, utilisez une cellule %scala pour enregistrer la UDF Scala en utilisant spark.udf.register. Puisque Python et Scala partagent le contexte d'exécution, l'UDF Scala est également disponible depuis Python.
  • Pour les clients utilisant des IDEs (avec Databricks Connect v2), vous pouvez réécrire l'UDF en tant qu'UDF Python Unity Catalog. Vous pouvez désormais également enregistrer des UDFs Scala et Java dans Unity Catalog. Consultez les fonctions définies par l'utilisateur (UDFs) Scala et Java dans Unity Catalog.

Le Job utilise sc.parallelize et spark.read.json() sur un cluster partagé.

Consultez Les Notebook de Job utilisent sc.parallelize et spark.read.json() sur un cluster partagé.

Le Job utilise sc.emptyRDD() pour créer des DataFrames vides sur un cluster partagé.

Consultez Job Notebooks créent des DataFrames vides à l'aide de sc.emptyRDD() sur un cluster partagé.

Le Job utilise le RDD mapPartitions sur un cluster partagé.

Les clusters partagés Unity Catalog utilisent Spark Connect pour la communication entre les programmes Python et Scala et le Spark Server, rendant les RDD inaccessibles.

Un cas d'utilisation typique pour les RDD est d'exécuter une logique d'initialisation coûteuse une seule fois, puis d'effectuer des opérations moins coûteuses par ligne, telles que l'appel d'un service externe ou l'initialisation de la logique de chiffrement.

Réécrivez les opérations RDD à l'aide de l'API DataFrame et des UDF Arrow natifs de PySpark.

Le Job utilise SparkContext (sc) et sqlContext sur un cluster partagé.

sc et sqlContext ne sont pas disponibles par conception en raison de l'architecture de cluster partagé d'Unity Catalog et de SparkConnect. Utilisez la variable spark pour interagir avec l'instance SparkSession.

La JVM Spark n’est pas directement accessible depuis les REPL Python ou Scala — uniquement via les commandes Spark. Les sc._jvm commandes sont conçues pour échouer.

Les sc commandes suivantes ne sont pas prises en charge : emptyRDD, range, init_batched_serializer, parallelize, pickleFile, textFile, wholeTextFiles, binaryFiles, binaryRecords, sequenceFile, newAPIHadoopFile, newAPIHadoopRDD, hadoopFile, hadoopRDD, union, runJob, setSystemProperty, uiWebUrl, stop, setJobGroup, setLocalProperty getConf

Le Job utilise sparkContext.getConf sur un cluster partagé.

sparkContext, df.sparkContext, sc.sparkContext et les APIs similaires ne sont pas disponibles par conception. Utilisez spark.conf à la place.

Le Job utilise sc.setJobDescription() sur un cluster partagé.

sc.setJobDescription("String") n'est pas disponible de par sa conception en raison de l'architecture de cluster partagé d'Unity Catalog et de SparkConnect.

Utilisez spark.addTag() pour attacher une balise, et getTags() et interruptTag(tag) pour agir sur la présence ou l'absence d'une balise.

Nécessite Databricks Runtime 14,1 ou une version ultérieure.

Le Job utilise sc.setLogLevel() sur un cluster partagé.

Sur les clusters partagés, le Spark Context n'est pas accessible pour définir les niveaux de logs directement. Dans Databricks Runtime 14+, le Spark Context n'est plus disponible.

Définissez spark.log.level sur DEBUG, WARN, INFO ou ERROR comme valeur de configuration Spark dans les paramètres du cluster.

Le Job utilise des expressions ou des queries profondément imbriquées sur un cluster partagé.

Les DataFrames profondément imbriqués et les expressions créées de manière récursive à l'aide de l'API PySpark DataFrame peuvent produire :

  • RecursionError: maximum recursion depth exceeded
  • SparkConnectGrpcException: Protobuf maximum nesting level exceeded

Identifiez les chemins de code profondément imbriqués et réécrivez-les à l'aide d'expressions linéaires, de sous-requêtes ou de vues temporaires. Par exemple, au lieu d'appeler de manière récursive df.withColumn, utilisez df.withColumns(dict) à la place.

Le Job utilise input_file_name() sur un cluster partagé.

Voir les Notebooks Job utilisent input_file_name() sur un cluster partagé.

Le Job effectue des opérations de données sur DBFS sur un cluster partagé.

Consultez les Notebooks de Job effectuant des Opérations de données sur DBFS sur un cluster partagé.

Scénario

Solutions

Le Job utilise des bibliothèques personnalisées via un script d'initialisation ou des bibliothèques définies par le cluster.

Une bibliothèque personnalisée serait définie comme un pip package ou JAR non disponible publiquement qui effectue des Opérations de lecture ou d'écriture Apache Spark ou SQL intégrées dans son code.

Modifiez la bibliothèque personnalisée pour vous assurer que :

  • Les noms de base de données utilisent un espace de noms à trois niveaux.
  • Les points de montage ne sont pas utilisés dans le code.

Un Job lit ou écrit dans une table du Hive metastore.

  • Évaluer la configuration du catalogue default dans le cluster de Job de la configuration Spark : spark.databricks.sql.initial.catalog.name my_catalog
  • Évaluez si le catalogue default du workspace peut être défini sur une valeur autre que hive_metastore afin que le code du Job n'ait pas à être modifié.
  • Sinon, modifiez le code de job pour renommer les espaces de noms à deux niveaux en espaces de noms à trois niveaux de la table appropriée.
  • Si le Job utilise du SQL pur, envisagez d'ajouter une instruction USE CATALOG.

Le Job lit ou écrit dans des chemins qui sont des sous-dossiers de tables (non pris en charge dans Unity Catalog).

  • Modifiez le code pour lire à partir de la table avec un prédicat sur la colonne de partition.
  • Modifiez le code pour écrire dans la table avec overwriteByPartition ou une autre option appropriée.

Le Job lit ou écrit dans des chemins de montage qui sont des tables Unity Catalog.

  • Modifiez le code pour faire référence à la table en espace de noms à trois niveaux correcte.
  • Si la table n'est pas enregistrée, ou ne le sera pas, le code doit quand même être modifié pour écrire dans un chemin de volume au lieu d'un chemin de montage.

Le Job lit ou écrit des fichiers (pas des tables) en utilisant des chemins de montage.

Modifiez le code pour écrire à la place dans un emplacement de volume.

Job est un job de streaming qui utilise applyInPandasWithState.

Non pris en charge actuellement. Envisagez de réécrire si possible, ou n'essayez pas de refactoriser ce Job tant qu'aucun support n'est fourni.

Le Job est un Job de streaming qui utilise le mode de traitement continu.

Le mode de traitement continu est expérimental dans Spark et n'est pas pris en charge dans Unity Catalog. Refactorisez le Job pour utiliser le streaming structuré. Si cela n'est pas possible, envisagez de maintenir le job en cours d'exécution par rapport à Hive Metastore.

Le Job est un job de streaming qui utilise des répertoires de points de contrôle.

  • Déplacer les répertoires de points de contrôle vers les volumes.
  • Modifiez le code dans le notebook pour utiliser un chemin de volume.
  • Le propriétaire du job devrait avoir les droits de lecture-écriture sur ce chemin.
  • Arrêter le job.
  • Déplacer le point de contrôle vers le nouvel emplacement de volume.
  • Redémarrer le Job.

Le Job a une définition de cluster inférieure à Databricks Runtime 11,3.

  • Modifiez la définition du cluster de Job en Databricks Runtime 11,3 ou version ultérieure.
  • Modifiez la définition du cluster de Job pour utiliser un mode d'accès désigné ou standard.

Le Job contient des Notebooks qui interagissent avec le stockage ou les tables.

Le Service Principal avec lequel le Job a été exécuté doit disposer d'un accès en lecture et en écriture aux Ressources requises dans Unity Catalog, telles que les volumes, les tables, les emplacements externes, etc.

Job est un pipeline LakeFlow.

  • Faites passer le cluster de Job à Databricks Runtime 13,1 ou version ultérieure.
  • Arrêter le Job de pipeline LakeFlow.
  • Déplacez les données vers une table gérée par Unity Catalog.
  • Modifiez la définition de Job du Lakeflow pipeline pour utiliser la nouvelle table gérée Unity Catalog.
  • Redémarrer le Lakeflow pipeline job.

Job utilise des services cloud non liés au stockage (tels qu'AWS Kinesis) avec un profil d'instance pour l'authentification.

Modifiez le code pour utiliser les identifiants de service Unity Catalog, qui régissent les identifiants capables d'interagir avec les services cloud non liés au stockage en générant des identifiants temporaires utilisables par les SDK.

Job utilise Scala.

  • Si la version de Databricks Runtime est inférieure à 13.3, exécutez sur un compute dédié.
  • Les clusters standard sont pris en charge sur Databricks Runtime 13.3 et versions ultérieures.

Le Job contient des Notebooks qui utilisent des UDF Scala.

  • Si la version de Databricks Runtime est inférieure à 13.3, exécutez sur un compute dédié.
  • Les clusters Standard sont pris en charge sur Databricks Runtime 14.2.

Le Job a des tâches qui utilisent MLR.

Exécutez sur un compute dédié.

Le Job possède une configuration de clusters qui repose sur des scripts d’initialisation globaux.

  • Utilisez Databricks Runtime 13.3 ou une version ultérieure pour un support complet.
  • Modifiez pour utiliser des scripts d'initialisation étendus au cluster ou des stratégies de cluster. Les scripts, fichiers et packages doivent être installés sur les volumes Unity Catalog pour l'exécution.

Le Job utilise des fichiers JAR/Maven, des extensions Spark ou des sources de données personnalisées (à partir de Spark).

  • Utilisez Databricks Runtime 13.3 ou une version ultérieure.
  • Utilisez des politiques de cluster pour installer des bibliothèques.

Le Job contient des Notebooks avec des UDF PySpark.

Utilisez Databricks Runtime 13,2 ou une version ultérieure.

Le Job contient des Notebooks avec du code Python qui effectue des appels réseau.

Utilisez Databricks Runtime 12.2 ou une version ultérieure.

Le Job contient des Notebooks avec des UDF Pandas (scalaires).

Utilisez Databricks Runtime 13,2 ou une version ultérieure.

Job utilisera les volumes Unity Catalog.

Utilisez Databricks Runtime 13.3 ou une version ultérieure.

Le Job utilise spark.catalog.X (tableExists, listTables, setDefaultCatalog) sur un cluster partagé.

Voir les notebooks Job utilisent spark.catalog.X sur un cluster partagé.

Le Job utilise dbutils...getContext().toJson() sur un cluster partagé.

Utilisez .safeToJson() au lieu de .toJson() lors de l'accès au contexte de commande (par exemple, pour récupérer un ID de Job). Ceci fournit un sous-ensemble d'informations qui peuvent être partagées en toute sécurité sur un cluster partagé.

Nécessite Databricks Runtime 13.3 LTS+

Le Job utilise spark.udf.registerJavaFunction sur un cluster partagé.

  • Utilisez Databricks Runtime 14.3 LTS ou une version ultérieure.
  • Pour les Notebooks et les Jobs, utilisez une cellule %scala pour enregistrer la UDF Scala en utilisant spark.udf.register. Puisque Python et Scala partagent le contexte d'exécution, l'UDF Scala est également disponible depuis Python.
  • Pour les clients utilisant des IDEs (avec Databricks Connect v2), vous pouvez réécrire l'UDF en tant qu'UDF Python Unity Catalog. Vous pouvez désormais également enregistrer des UDFs Scala et Java dans Unity Catalog. Consultez les fonctions définies par l'utilisateur (UDFs) Scala et Java dans Unity Catalog.

Le Job utilise sc.parallelize et spark.read.json() sur un cluster partagé.

Consultez Les Notebook de Job utilisent sc.parallelize et spark.read.json() sur un cluster partagé.

Le Job utilise sc.emptyRDD() pour créer des DataFrames vides sur un cluster partagé.

Consultez Job Notebooks créent des DataFrames vides à l'aide de sc.emptyRDD() sur un cluster partagé.

Le Job utilise le RDD mapPartitions sur un cluster partagé.

Les clusters partagés Unity Catalog utilisent Spark Connect pour la communication entre les programmes Python et Scala et le Spark Server, rendant les RDD inaccessibles.

Un cas d'utilisation typique pour les RDD est d'exécuter une logique d'initialisation coûteuse une seule fois, puis d'effectuer des opérations moins coûteuses par ligne, telles que l'appel d'un service externe ou l'initialisation de la logique de chiffrement.

Réécrivez les opérations RDD à l'aide de l'API DataFrame et des UDF Arrow natifs de PySpark.

Le Job utilise SparkContext (sc) et sqlContext sur un cluster partagé.

sc et sqlContext ne sont pas disponibles par conception en raison de l'architecture de cluster partagé d'Unity Catalog et de SparkConnect. Utilisez la variable spark pour interagir avec l'instance SparkSession.

La JVM Spark n’est pas directement accessible depuis les REPL Python ou Scala — uniquement via les commandes Spark. Les sc._jvm commandes sont conçues pour échouer.

Les sc commandes suivantes ne sont pas prises en charge : emptyRDD, range, init_batched_serializer, parallelize, pickleFile, textFile, wholeTextFiles, binaryFiles, binaryRecords, sequenceFile, newAPIHadoopFile, newAPIHadoopRDD, hadoopFile, hadoopRDD, union, runJob, setSystemProperty, uiWebUrl, stop, setJobGroup, setLocalProperty getConf

Le Job utilise sparkContext.getConf sur un cluster partagé.

sparkContext, df.sparkContext, sc.sparkContext et les APIs similaires ne sont pas disponibles par conception. Utilisez spark.conf à la place.

Le Job utilise sc.setJobDescription() sur un cluster partagé.

sc.setJobDescription("String") n'est pas disponible de par sa conception en raison de l'architecture de cluster partagé d'Unity Catalog et de SparkConnect.

Utilisez spark.addTag() pour attacher une balise, et getTags() et interruptTag(tag) pour agir sur la présence ou l'absence d'une balise.

Nécessite Databricks Runtime 14,1 ou une version ultérieure.

Le Job utilise sc.setLogLevel() sur un cluster partagé.

Sur les clusters partagés, le Spark Context n'est pas accessible pour définir les niveaux de logs directement. Dans Databricks Runtime 14+, le Spark Context n'est plus disponible.

Définissez spark.log.level sur DEBUG, WARN, INFO ou ERROR comme valeur de configuration Spark dans les paramètres du cluster.

Le Job utilise des expressions ou des queries profondément imbriquées sur un cluster partagé.

Les DataFrames profondément imbriqués et les expressions créées de manière récursive à l'aide de l'API PySpark DataFrame peuvent produire :

  • RecursionError: maximum recursion depth exceeded
  • SparkConnectGrpcException: Protobuf maximum nesting level exceeded

Identifiez les chemins de code profondément imbriqués et réécrivez-les à l'aide d'expressions linéaires, de sous-requêtes ou de vues temporaires. Par exemple, au lieu d'appeler de manière récursive df.withColumn, utilisez df.withColumns(dict) à la place.

Le Job utilise input_file_name() sur un cluster partagé.

Voir les Notebooks Job utilisent input_file_name() sur un cluster partagé.

Le Job effectue des opérations de données sur DBFS sur un cluster partagé.

Consultez les Notebooks de Job effectuant des Opérations de données sur DBFS sur un cluster partagé.

Scénarios détaillés

Les scénarios suivants nécessitent des exemples de code.

Les Notebooks Job utilisent spark.catalog.X sur un cluster partagé

Utiliser Databricks Runtime 14,2 ou une version ultérieure.

Si une mise à niveau de Databricks Runtime n'est pas possible, utilisez les solutions de contournement suivantes.

Au lieu de tableExists, utilisez :

Python
# SQL workaround
def tableExistsSql(tablename):
try:
spark.sql(f"DESCRIBE TABLE {tablename};")
except Exception as e:
return False
return True
tableExistsSql("jakob.jakob.my_table")

Au lieu de listTables, utilisez SHOW TABLES (qui prend également en charge la restriction par base de données ou la correspondance de modèles) :

Python
spark.sql("SHOW TABLES")

Pour setDefaultCatalog, exécutez :

Python
spark.sql("USE CATALOG <catalog_name>")

Les Notebooks de Job utilisent sc.parallelize et spark.read.json() sur un cluster partagé

Utilisez json.loads à la place.

Avant :

Python
json_content1 = "{'json_col1': 'hello', 'json_col2': 32}"
json_content2 = "{'json_col1': 'hello', 'json_col2': 'world'}"
json_list = []
json_list.append(json_content1)
json_list.append(json_content2)
df = spark.read.json(sc.parallelize(json_list))
display(df)

Après :

Python
from pyspark.sql import Row
import json
# Sample JSON data as a list of dictionaries (similar to JSON objects)
json_data_str = response.text
json_data = [json.loads(json_data_str)]
# Convert dictionaries to Row objects
rows = [Row(**json_dict) for json_dict in json_data]
# Create DataFrame from list of Row objects
df = spark.createDataFrame(rows)
df.display()

Les Notebook de Job créent des DataFrames vides à l'aide de sc.emptyRDD() sur un cluster partagé

Avant :

Scala
val schema = StructType( StructField("k", StringType, true) :: StructField("v", IntegerType, false) :: Nil)
spark.createDataFrame(sc.emptyRDD[Row], schema)

Après :

Scala
import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType}
val schema = StructType( StructField("k", StringType, true) :: StructField("v", IntegerType, false) :: Nil)
spark.createDataFrame(new java.util.ArrayList[Row](), schema)
Python
from pyspark.sql.types import StructType, StructField, StringType
schema = StructType([StructField("k", StringType(), True)])
spark.createDataFrame([], schema)

Les Notebooks Job utilisent input_file_name() sur un cluster partagé

input_file_name() n'est pas pris en charge dans Unity Catalog pour les clusters partagés.

Pour obtenir le nom du fichier :

Python
.withColumn("RECORD_FILE_NAME", col("_metadata.file_name"))

Pour obtenir le chemin d'accès complet du fichier :

Python
.withColumn("RECORD_FILE_PATH", col("_metadata.file_path"))

Les deux options fonctionnent avec spark.read.

Les Notebook de Job effectuent des Opérations de données sur DBFS sur un cluster partagé

Lorsque vous utilisez DBFS avec un cluster partagé via le service FUSE, le cluster ne peut pas accéder au système de fichiers et génère une erreur de fichier introuvable.

Les exemples suivants échouent sur un cluster partagé :

Bash
with open('/dbfs/test/sample_file.csv', 'r') as file:
ls -ltr /dbfs/test
cat /dbfs/test/sample_file.csv

Utilisez l'une des solutions suivantes :

  • Utilisez un volume Databricks Unity Catalog au lieu de DBFS (recommandé).
  • Mettez à jour le code pour utiliser dbutils ou spark, qui utilisent le chemin d'accès direct au stockage et bénéficient d'un accès à DBFS depuis les clusters partagés.