Lire et écrire dans des fichiers CSV

Cet article fournit des exemples de lecture et d’écriture dans des fichiers CSV avec Azure Databricks en utilisant Python, Scala, R et SQL.

Remarque

Databricks recommande la fonction table read_files pour les utilisateurs SQL afin de lire des fichiers CSV. read_files est disponible dans Databricks Runtime 13.1 et versions ultérieures.

Vous pouvez également utiliser une vue temporaire. Si vous utilisez SQL pour lire des données CSV directement sans utiliser de vues temporaires ou read_files, les limitations suivantes s’appliquent :

Options

Vous pouvez configurer plusieurs options pour les sources de données de fichiers CSV. Consultez les articles de référence Apache Spark suivants pour connaître les options de lecture et d’écriture prises en charge.

Utiliser des enregistrements CSV malformés

Lors de la lecture de fichiers CSV avec un schéma spécifié, il est possible que les données contenues dans les fichiers ne correspondent pas au schéma. Par exemple, un champ contenant le nom de la ville ne sera pas analysé comme un entier. Les conséquences dépendent du mode d’exécution de l’analyseur :

  • PERMISSIVE (par défaut) : des valeurs Null sont insérées pour les champs qui n’ont pas pu être analysés correctement
  • DROPMALFORMED : supprime les lignes qui contiennent des champs qui n’ont pas pu être analysés
  • FAILFAST : abandonne la lecture en cas de détection de données malformées

Pour définir le mode, utilisez l’option mode.

diamonds_df = (spark.read
  .format("csv")
  .option("mode", "PERMISSIVE")
  .load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)

Dans le mode PERMISSIVE, il est possible d’inspecter les lignes qui n’ont pas pu être analysées correctement à l’aide de l’une des méthodes suivantes :

  • Vous pouvez fournir un chemin d’accès personnalisé à l’option badRecordsPath permettant d’enregistrer des enregistrements endommagés dans un fichier.
  • Vous pouvez ajouter la colonne _corrupt_record au schéma fourni à DataFrameReader pour examiner les enregistrements endommagés dans le DataFrame résultant.

Notes

L’option badRecordsPath est prioritaire sur _corrupt_record, ce qui signifie que les lignes mal formées écrites dans le chemin fourni n’apparaissent pas dans le DataFrame résultant.

Le comportement par défaut pour les enregistrements mal formés change lors de l’utilisation de la colonne de données sauvée.

Notebook de recherche de lignes malformées

Obtenir le notebook

Colonne de données récupérées

Notes

Cette fonctionnalité est prise en charge dans Databricks Runtime 8.3 (sans support) et versions ultérieures.

Lorsque vous utilisez le mode PERMISSIVE, vous pouvez activer la colonne de données sauvée pour capturer les données qui n’ont pas été analysées, car un ou plusieurs champs d’un enregistrement ont l’un des problèmes suivants :

  • Absent du schéma fourni.
  • Ne correspond pas au type de données du schéma fourni.
  • A une incompatibilité de cas avec les noms de champs dans le schéma fourni.

La colonne des données récupérées est renvoyée sous la forme d’un document JSON contenant les colonnes récupérées, ainsi que le chemin d’accès au fichier source de l’enregistrement. Pour supprimer le chemin du fichier source de la colonne de données sauvées, vous pouvez définir la configuration SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). Vous pouvez activer la colonne de données sauvées en définissant l’option rescuedDataColumn sur un nom de colonne, comme _rescued_data avec spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>).

L’analyseur CSV prend en charge trois modes d’analyse des enregistrements : PERMISSIVE, DROPMALFORMED et FAILFAST. En cas d’utilisation avec rescuedDataColumn, les discordances de type de données n’entraînent pas de suppression d’enregistrements en mode DROPMALFORMED, ou de génération d’erreur en mode FAILFAST. Seuls les enregistrements endommagés, c’est-à-dire les enregistrements CSV mal formés, sont annulés ou génèrent des erreurs.

Quand rescuedDataColumn est utilisé en mode PERMISSIVE, les règles suivantes s’appliquent aux enregistrements endommagés:

  • La première ligne du fichier (une ligne d’en-tête ou une ligne de données) définit la longueur de ligne attendue.
  • Une ligne avec un nombre différent de colonnes est considérée comme incomplète.
  • Les incompatibilités de type de données ne sont pas considérées comme des enregistrements endommagés.
  • Seuls les enregistrements CSV incomplets et mal formés sont considérés comme endommagés et enregistrés dans la colonne _corrupt_record ou badRecordsPath.

Exemple SQL : lire le fichier CSV

L’exemple SQL suivant lit un fichier CSV à l’aide de read_files.

-- mode "FAILFAST" aborts file parsing with a RuntimeException if malformed lines are encountered
SELECT * FROM read_files(
  's3://<bucket>/<path>/<file>.csv',
  format => 'csv',
  header => true,
  mode => 'FAILFAST')

Exemples Scala, R et Python : lire le fichier CSV

Le notebook suivant montre comment lire un fichier, afficher des exemples de données et imprimer le schéma de données en utilisant Scala, R et Python. Les exemples de cette section utilisent le jeu de données de diamants. Spécifiez le chemin d’accès au jeu de données, ainsi que toutes les options que vous souhaitez.

Notebook de lecture de fichiers CSV

Obtenir le notebook

Exemple : spécifier le schéma

Lorsque le schéma du fichier CSV est connu, vous pouvez spécifier le schéma souhaité au lecteur CSV avec l’option schema.

Notebook de lecture de fichiers CSV avec schéma

Obtenir le notebook

Exemple SQL qui utilise read_files :

SELECT * FROM read_files(
  's3://<bucket>/<path>/<file>.csv',
  format => 'csv',
  header => false,
  schema => 'id string, date date, event_time timestamp')

Exemple : pièges liés à la lecture d’un sous-ensemble de colonnes

Le comportement de l’analyseur CSV dépend de l’ensemble des colonnes qui sont lues. Si le schéma spécifié est incorrect, les résultats peuvent varier considérablement selon le sous-ensemble de colonnes auxquelles vous accédez. Le notebook suivant présente les pièges les plus courants.

Notebook des pièges de la lecture d’un sous-ensemble de colonnes d’un fichier CSV

Obtenir le notebook