Aller au contenu principal
Page non répertoriée
Cette page n'est pas répertoriée. Les moteurs de recherche ne l'indexeront pas, et seuls les utilisateurs ayant un lien direct peuvent y accéder.

Gérez les enregistrements et les fichiers incorrects

Databricks propose plusieurs options pour gérer les fichiers qui contiennent des enregistrements incorrects. Exemples de mauvaises données :

  • Enregistrements incomplets ou corrompus : Principalement observés dans les formats de fichier textuels comme JSON et CSV. Par exemple, un enregistrement JSON qui ne comporte pas d'accolade fermante ou un enregistrement CSV qui ne contient pas autant de colonnes que l'en-tête ou le premier enregistrement du fichier CSV.
  • Types de données non correspondants : lorsque la valeur d'une colonne n'a pas le type de données spécifié ou inféré.
  • Noms de champ incorrects : Peut se produire dans tous les formats de fichier, lorsque le nom de colonne spécifié dans le fichier ou l'enregistrement a une casse différente de celle du schéma spécifié ou déduit.
  • Fichiers corrompus : Lorsqu'un fichier ne peut pas être lu, ce qui peut être dû à la corruption des métadonnées ou des données dans des types de fichiers binaires tels qu'Avro, Parquet et ORC. En de rares occasions, cela peut être causé par des pannes transitoires prolongées dans le système de stockage sous-jacent.
  • Fichiers manquants : Fichier découvert pendant la durée de l'analyse de query et qui n'existe plus au moment du traitement.

Utilisation badRecordsPath

Lorsque vous définissez badRecordsPath, le chemin spécifié enregistre les exceptions pour les enregistrements ou fichiers incorrects rencontrés lors du chargement des données.

Outre les enregistrements et les fichiers corrompus, les erreurs indiquant des fichiers supprimés, des exceptions de connexion réseau, des exceptions d'E/S, etc., sont ignorées et enregistrées sous le badRecordsPath.

remarque

L’utilisation de l’option badRecordsPath dans une source de données basée sur des fichiers présente des limites importantes :

  • C'est non transactionnel et cela peut entraîner des résultats incohérents.
  • Les erreurs transitoires sont traitées comme des échecs.

Impossible de trouver le fichier d'entrée

Scala
val df = spark.read
.option("badRecordsPath", "/tmp/badRecordsPath")
.format("parquet").load("/input/parquetFile")

// Delete the input parquet file '/input/parquetFile'
dbutils.fs.rm("/input/parquetFile")

df.show()

Dans l'exemple ci-dessus, comme df.show() ne parvient pas à trouver le fichier d'entrée, Spark crée un fichier d'exception au format JSON pour enregistrer l'erreur. Par exemple, /tmp/badRecordsPath/20170724T101153/bad_files/xyz est le chemin du fichier d'exception. Ce fichier se trouve dans le répertoire badRecordsPath spécifié, /tmp/badRecordsPath. 20170724T101153 est l'heure de création de ce DataFrameReader. bad_files est le type d'exception. xyz est un fichier qui contient un enregistrement JSON, qui contient le chemin du fichier erroné et le message d'exception/de raison.

Le fichier d'entrée contient un enregistrement incorrect

Scala
// Creates a json file containing both parsable and corrupted records
Seq("""{"a": 1, "b": 2}""", """{bad-record""").toDF().write.format("text").save("/tmp/input/jsonFile")

val df = spark.read
.option("badRecordsPath", "/tmp/badRecordsPath")
.schema("a int, b int")
.format("json")
.load("/tmp/input/jsonFile")

df.show()

Dans cet exemple, le DataFrame contient uniquement le premier enregistrement analysable ({"a": 1, "b": 2}). Le 2e mauvais enregistrement ({bad-record) est enregistré dans le fichier d'exception, qui est un fichier JSON situé dans /tmp/badRecordsPath/20170724T114715/bad_records/xyz. Le fichier d'exception contient l'enregistrement erroné, le chemin du fichier contenant l'enregistrement et le message d'exception/raison. Après avoir localisé les fichiers d'exception, vous pouvez utiliser un lecteur JSON pour les traiter.