2 votes

Modification du schéma du cadre de données en fonction des valeurs filtrées lors de la lecture de JSON

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 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X