J'ai un cas où j'essaie de lire un fichier json constitué d'une structure globale
schéma global du fichier json :
root
|-- event: string (nullable = true)
|-- eventid: string (nullable = true)
|-- property1: struct (nullable = true)
| |-- sub_property1: string (nullable = true)
| |-- sub_property2: string (nullable = true)
|-- property2: struct (nullable = true)
| |-- sub_property1: string (nullable = true)
| |-- sub_property2: string (nullable = true)
| |-- sub_property3: string (nullable = true)
Maintenant, selon le type d'événement, les propriétés peuvent être remplies ou non. Pour event = 'facebook_login'
le schéma serait
facebook_login schéma :
root
|-- event: string (nullable = true)
|-- eventid: string (nullable = true)
|-- property1: struct (nullable = true)
| |-- sub_property1: string (nullable = true)
|-- property2: struct (nullable = true)
| |-- sub_property1: string (nullable = true)
| |-- sub_property3: string (nullable = true)
et quand event = 'google_login'
le schéma serait
google_login schéma :
root
|-- event: string (nullable = true)
|-- eventid: string (nullable = true)
|-- property1: struct (nullable = true)
| |-- sub_property2: string (nullable = true)
|-- property2: struct (nullable = true)
| |-- sub_property2: string (nullable = true)
| |-- sub_property3: string (nullable = true)
Le problème auquel je suis confronté est que lorsque je lis ce fichier et que j'essaie de filtrer les événements, cela donne le même schéma que le schéma global du fichier (en donnant bien sûr des valeurs nulles/manquantes pour les propriétés manquantes).
json_df = df.read.json(json_file_path)
fb_login_df = json_df.filter("event='facebook_login'")
google_login_df = json_df.filter("event='google_login'")
fb_login_df.printSchema()
google_login_df.printSchema() # same schema output for both
Existe-t-il un moyen de réaliser cela ? Avoir des structures de schéma différentes en fonction de la valeur filtrée ?
P.S : Je pensais avoir des schémas personnalisés définis pour chaque type d'événement mais cela ne serait pas évolutif puisqu'il y a des milliers de types d'événements différents dans le fichier json .