Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
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 la documentation Apache Spark sur les fichiers JSON.
Paramètres
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
Remarque
Cette fonctionnalité est prise en charge dans Databricks Runtime 8.2 (EoL) et versions ultérieures .
La colonne de données sauvée garantit que vous ne perdez jamais de données pendant ETL. La colonne de données sauvée contient toutes les données qui n’ont pas été analysées, soit parce qu’elles étaient manquantes dans le schéma donné, soit parce qu’il y avait une incompatibilité de type, soit parce que la casse de la colonne dans l’enregistrement ou le fichier ne correspondait pas à celle-ci dans le schéma. La colonne de données sauvée est retournée en tant qu’objet blob JSON contenant les colonnes sauvées et le chemin du fichier source de l’enregistrement. Pour supprimer le chemin du fichier source de la colonne de données sauvée, définissez la configuration spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")SQL. Pour activer la colonne de données sauvée, définissez l’option rescuedDataColumn sur un nom de colonne, par exemple _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 incompatibilités de type de données ne sont pas considérées comme des enregistrements incorrects lors de l’utilisation du rescuedDataColumnfichier . Seuls les enregistrements JSON incomplets et malformés sont stockés dans badRecordsPath.
Exemples
Les exemples suivants montrent comment lire et écrire des fichiers JSON à l’aide de l’API DataFrame et de SQL.
Mode ligne unique
Chaque ligne contient un objet JSON :
{"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 :
Python
df = spark.read.format("json").load("example.json")
df.printSchema()
Langage de programmation Scala
val df = spark.read.format("json").load("example.json")
df.printSchema
Spark déduit automatiquement le schéma :
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
L’objet JSON suivant s’étend sur 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 :
Python
mdf = spark.read.option("multiline", "true").format("json").load("/tmp/multi-line.json")
mdf.show(truncate=False)
Langage de programmation Scala
val mdf = spark.read.option("multiline", "true").format("json").load("/tmp/multi-line.json")
mdf.show(false)
SQL
CREATE TEMPORARY VIEW multiLineJsonTable
USING json
OPTIONS (path="/tmp/multi-line.json",multiline=true)
Lire des fichiers JSON à l’aide de SQL
Vous pouvez utiliser la read_files fonction valeur de table en SQL pour lire des fichiers JSON.
SELECT * FROM read_files(
'<path to json file or folder>',
format => 'json',
multiLine => true)
Vous pouvez également utiliser USING JSON pour lire des fichiers JSON. Toutefois, Databricks recommande d’utiliser read_files au lieu de USING JSON cela, car read_files permet la spécification du schéma et des options de traitement de fichiers supplémentaires.
DROP TABLE IF EXISTS json_data;
CREATE TABLE json_data
USING JSON
OPTIONS (path "/path/to/file.json", multiline true);
SELECT * FROM json_data;
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 démontre les modes monoligne et multiligne.