Fichier JSON

Vous pouvez lire des fichiers JSON en mode monoligne ou multiligne. En mode monoligne, un fichier peut être fractionné en plusieurs parties et lu en parallèle. En mode multiligne, un fichier est chargé en tant qu’entité entière et ne peut pas être fractionné.

Pour plus d'informations, consultez Fichiers JSON.

Options

Consultez les articles de référence Apache Spark suivants pour connaître les options de lecture et d’écriture prises en charge.

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

Notes

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

La colonne des données récupérées garantit que vous ne perdez pas ou ne manquez pas les données pendant l’opération ETL. La colonne des données récupérées contient toutes les données qui n'ont pas été analysées, soit parce qu'elles étaient absentes du schéma donné, soit parce qu'il y avait une erreur de type, soit parce que la casse de la colonne dans l'enregistrement ou le fichier ne correspondait pas à celle du schéma. La colonne des données récupérées est renvoyée sous la forme d’un objet blob JSON contenant les colonnes qui ont été récupérées, et 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("json").load(<path>).

L’analyseur JSON 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 JSON mal formés, sont annulés ou génèrent des erreurs. Si vous utilisez l’option badRecordsPath lors de l’analyse JSON, les discordances de types de données ne sont pas considérées comme des enregistrements incorrects lors de l’utilisation de rescuedDataColumn. Seuls les enregistrements JSON incomplets et malformés sont stockés dans badRecordsPath.

Exemples

Mode ligne unique

Dans cet exemple, il y a un objet JSON par ligne :

{"string":"string1","int":1,"array":[1,2,3],"dict": {"key": "value1"}}
{"string":"string2","int":2,"array":[2,4,6],"dict": {"key": "value2"}}
{"string":"string3","int":3,"array":[3,6,9],"dict": {"key": "value3", "extra_key": "extra_value3"}}

Pour lire les données JSON, utilisez :

val df = spark.read.format("json").load("example.json")

Spark déduit automatiquement le schéma.

df.printSchema
root
 |-- array: array (nullable = true)
 |    |-- element: long (containsNull = true)
 |-- dict: struct (nullable = true)
 |    |-- extra_key: string (nullable = true)
 |    |-- key: string (nullable = true)
 |-- int: long (nullable = true)
 |-- string: string (nullable = true)

Mode multiligne

Cet objet JSON occupe plusieurs lignes :

[
  {"string":"string1","int":1,"array":[1,2,3],"dict": {"key": "value1"}},
  {"string":"string2","int":2,"array":[2,4,6],"dict": {"key": "value2"}},
  {
    "string": "string3",
    "int": 3,
    "array": [
        3,
        6,
        9
    ],
    "dict": {
        "key": "value3",
        "extra_key": "extra_value3"
    }
  }
]

Pour lire cet objet, activez le mode multiligne :

SQL

CREATE TEMPORARY VIEW multiLineJsonTable
USING json
OPTIONS (path="/tmp/multi-line.json",multiline=true)

Scala

val mdf = spark.read.option("multiline", "true").format("json").load("/tmp/multi-line.json")
mdf.show(false)

Détection automatique du jeu de caractères

Par défaut, le jeu de caractères des fichiers d’entrée est détecté automatiquement. Vous pouvez spécifier explicitement le jeu de caractères à l’aide de l’option charset :

spark.read.option("charset", "UTF-16BE").format("json").load("fileInUTF16.json")

Parmi les jeux de caractères pris en charge figurent les suivants : UTF-8, UTF-16BE, UTF-16LE, UTF-16, UTF-32BE, UTF-32LE et UTF-32. Pour obtenir la liste complète des jeux de caractères pris en charge par Oracle Java SE, consultez Encodages pris en charge.

Exemple de notebook : lire des fichiers JSON

Le notebook suivant illustre les modes monoligne et multiligne.

Lire le notebook de fichiers JSON

Obtenir le notebook