Si vous travaillez avec Spark, vous croiserez certainement trois API : DataFrames, Datasets et RDD.
Les RDD, ou Resilient Distributed Datasets (datasets distribués résilients), sont des collections d'enregistrements avec calcul distribué. Ils sont, par nature, tolérants aux pannes et immuables. Ils peuvent être exploités parallèlement à des API de bas niveau, tandis que leur fonction « lazy » accélère les opérations spark. Les RDD prennent en charge deux types d'opérations :
Si vous choisissez de travailler avec des RDD, vous devrez optimiser chacun d'eux. D'autre part, contrairement aux Datasets et aux DataFrames, les RDD n'infèrent pas le schéma des données acquises : vous devez le spécifier.
Les DataFrames sont des collections distribuées de lignes sous des colonnes nommées. En termes simples, ils ressemblent à des tableaux Excel avec des en-têtes de colonne. On peut aussi les comparer à une table dans une base de données relationnelle, ou à un DataFrame en R ou en Python. Les DataFrames partagent trois caractéristiques avec les RDD :
Plusieurs méthodes permettent de créer des DataFrames dans Spark :
Le principal inconvénient de l'API DataFrame est qu'elle ne prend pas correctement en charge le temps de compilation. Autrement dit, l'utilisateur est confronté à un obstacle lorsque la structure des données n'est pas connue.
Les Datasets sont des collections d'objets immuables et fortement typées correspondant à un schéma relationnel. Vous pouvez en créer à partir d'objets JVM et les manipuler à l'aide de transformations fonctionnelles complexes. Les Datasets peuvent être créés de deux manières :
Le principal inconvénient des datasets est qu'ils doivent être convertis en chaînes.
