Fermer

janvier 10, 2024

Spark Scala : Approches pour la création de Dataframe

Spark Scala : Approches pour la création de Dataframe


Dans Spark avec Scala, la création de DataFrames est fondamentale pour la manipulation et l’analyse des données. Il existe plusieurs approches pour créer des DataFrames, chacune offrant ses avantages uniques. Vous pouvez créer des DataFrames à partir de diverses sources de données telles que CSV, JSON ou même à partir de RDD (Resilient Distributed Datasets) existants. Dans ce blog, nous verrons quelques approches pour créer un dataframe avec des exemples.

Comprendre les DataFrames Spark :

Les Spark DataFrames sont un membre fondamental d’Apache Spark, offrant une abstraction de niveau supérieur construite sur RDD. Leur conception vise à offrir un mécanisme de traitement plus efficace pour gérer des données structurées à grande échelle.

Explorons les différentes méthodes de création des dataframes :

Création de DataFrame à partir d’une collection :

Les DataFrames destinés à des tests immédiats peuvent être construits au-dessus d’une collection.

Dans ce cas, la trame de données est construite au-dessus d’une séquence.

Séquence vers DataFrame

Création de DataFrame à l’aide de l’API DataFrameReader :

L’ensemble de données ci-dessous sera utilisé pour explorer la création de DataFrames à l’aide de l’API DataFrameReader.

fichier csv

Création d’un Dataframe à partir de fichiers CSV/TXT :

Nous pouvons directement utiliser la méthode « spark.read.csv » pour lire le fichier dans un dataframe. Mais les données actuelles ne peuvent pas être chargées directement dans une table ou autre en aval. Les en-têtes et les délimiteurs doivent être placés comme des options distinctes pour que les données soient correctement chargées dans la trame de données. Passons en revue les options disponibles et mettons les données dans un format approprié ci-dessous.

lecture d'un fichier CSV vierge

Possibilités :

Par défaut, l’option d’en-tête sera fausse dans l’API Spark Dataframe Reader. Puisque notre fichier a un en-tête, nous devons spécifier l’option – option(« header », « true ») pour obtenir l’en-tête. Parfois, si l’option d’en-tête a été manquée et que le fichier a un en-tête, il est possible que l’en-tête se présente sous la forme d’une ligne et soit stocké dans le tableau.

csv lu avec en-tête

L’option de délimiteur sera « », par défaut. L’exemple de fichier que nous avons fourni contient «|” comme délimiteur, il doit donc être explicitement appelé à l’aide de l’option – option(« delimiter », »| ») pour diviser les colonnes.

csv lu avec délimiteur

Comme vous le voyez dans l’instantané ci-dessus, les données sont divisées et affectées à des colonnes et des lignes individuelles, bien que la capitale de l’Inde, New Delhi, soit divisée en deux lignes, car par défaut, l’option multiligne serait définie sur false. Si nous avons ce type de lignes multiples provenant du fichier, nous pouvons activer l’option multiligne en utilisant cette option – option(« multiline », « true »).

lecture csv avec option multiligne

Le schéma de la trame de données peut être visualisé en utilisant la méthode « .printSchema ».

schéma sans schéma d'inférence

À partir de l’instantané ci-dessus, nous pouvons voir que le type de données de la colonne « Id » est appelé chaîne, bien que le type de données que nous voyons dans les fichiers soit un nombre entier. En effet, inferSchema sera défini sur false lors de la lecture du fichier. « inferSchema » n’est rien d’autre que le DataFrameReader, qui parcourra les données et trouvera le type de données de la colonne. Nous pouvons également appliquer le schéma du dataframe en créant un schéma à l’aide de StructType et en le transmettant via la méthode « .schema ». Les deux méthodes sont présentées ci-dessous.

  • inferSchema : nous pouvons définir inferSchema sur true en incluant cette option – option(« inferSchema », « true »), ce qui à son tour obligera le DataFrameReader à parcourir les données et à trouver le type de données.

schéma avec schéma d'inférence

  • Définition du schéma : nous pouvons appliquer le schéma en utilisant la méthode « .schema » pour laquelle nous définirons le schéma et le transmettrons lors de la lecture du fichier, grâce à laquelle nous pourrons contrôler le type de données des colonnes. S’il y a une incompatibilité de type de données lors de l’application des données dans la colonne, null sera renseigné.

schéma avec schéma appliqué

Le « spark.read.csv » avec les options peut être utilisé pour lire les fichiers txt ou txt.gz, qui nous renverront la trame de données. Si nous avons le fichier texte approprié dans le zip, nous pouvons alors le lire directement sous forme de trames de données sans le décompresser.

txt.gz lire

  • Lecture de CSV avec un format différent :

Le « spark.read.format(« csv »).load » peut également être utilisé à la place de spark.read.csv. Les deux sont les mêmes fonctions mais avec une syntaxe différente.

csv lit un format différent

Ci-dessus sont quelques-unes des options présentes lors de la lecture du fichier dans une trame de données. Quelques options supplémentaires qui n’ont pas été présentées ici sont escapeQuotes, unescapedQuoteHandling, quote, escape, mode, nullValue, lineSep.

Création d’un Dataframe à partir de fichiers json :

Vous trouverez ci-dessous l’instantané du fichier json qui sera utilisé pour les exemples.

Fichier JSON

Le DataFrameReader peut être utilisé pour lire le json dans un dataframe en utilisant « spark.read.json() ».

json lire

Dans l’instantané ci-dessus, nous pouvons voir que la trame de données est organisée en utilisant l’ordre alphabétique des noms de colonnes, que nous pouvons changer au format souhaité avec Id en premier suivi du pays et de la capitale comme dans le json.

json lu avec le schéma

Avec le schéma défini, nous pouvons voir que les colonnes sont alignées et peuvent être transformées si nécessaire et stockées dans une table.

Le DataFrameReader peut également être utilisé pour lire des fichiers de parquet, orc et également, nous pouvons nous connecter à différentes bases de données en utilisant la connexion jdbc et les lire dans le dataframe.

Conclusion:

En conclusion, la création de DataFrames dans Spark à l’aide de Scala implique diverses approches, chacune adaptée à des exigences et préférences spécifiques. L’API DataFrame fournit une interface flexible et intuitive pour la manipulation et l’analyse des données, offrant des paradigmes de programmation à la fois fonctionnels et déclaratifs.

Le processus de création de DataFrame peut inclure la lecture de données provenant de diverses sources, telles que des fichiers CSV, JSON, Parquet ou même des bases de données externes. Une fois le DataFrame créé, vous pouvez utiliser les puissantes fonctionnalités de Spark SQL pour exécuter des requêtes SQL directement sur vos DataFrames et effectuer vos transformations avant de les utiliser en aval. Dans l’ensemble, la flexibilité et l’évolutivité de l’API DataFrame de Spark Scala permettent aux ingénieurs et analystes de données de traiter et d’analyser efficacement des ensembles de données à grande échelle au sein de l’écosystème Spark.






Source link