Quelles sont les différences entre Apache Spark SQLContext et HiveContext?
Certaines sources disent que, puisque HiveContext est un sur-ensemble de SQLContext, les développeurs doivent toujours utiliser HiveContext, qui comporte davantage de fonctionnalités que SQLContext. Mais les API actuelles de chaque contexte sont généralement identiques.
Spark 2.0 +
Spark 2.0 fournit des fonctions de fenêtre natives ( SPARK-8641 ) et offre quelques améliorations supplémentaires dans l'analyse syntaxique et une conformité bien meilleure à SQL 2003, de sorte qu'il est nettement moins dépendant de Hive pour la réalisation des fonctionnalités principales HiveContext
(SparkSession
avec support Hive) semble être légèrement moins important.
Spark <2.0
Évidemment, si vous voulez travailler avec Hive, vous devez utiliser HiveContext
. Au-delà de cela, la plus grande différence à ce jour (Spark 1.5) réside dans le support de fonctions de la fenêtre et la possibilité d’accéder aux fichiers UDF Hive.
De manière générale, les fonctions de fenêtre sont une fonctionnalité très intéressante et peuvent être utilisées pour résoudre des problèmes assez complexes de manière concise, sans alterner entre les RDD et les DataFrames. Les performances sont encore loin d'être optimales, surtout sans PARTITION BY
clause mais ce n'est vraiment rien Spark spécifique.
En ce qui concerne les fichiers UDF Hive, ce n’est plus un problème grave aujourd’hui, mais avant Spark 1.5, de nombreuses fonctions SQL ont été exprimées à l’aide des fichiers Hive UDF et exigent que HiveContext
fonctionne.
HiveContext
fournit également un analyseur SQL plus robuste. Voir par exemple: py4j.protocol.Py4JJavaError lors de la sélection d'une colonne imbriquée dans le cadre de données à l'aide de la commande select statetment
Enfin, HiveContext
est requis pour démarrer le serveur Thrift.
Le plus gros problème avec HiveContext
est qu'il est livré avec de grandes dépendances.
Lors de la programmation avec Spark SQL, nous avons deux points d'entrée, selon que nous avons besoin ou non du support Hive. Le point d'entrée recommandé est HiveContext pour fournir un accès à HiveQL et à d'autres fonctionnalités dépendantes de Hive. Le plus basique SQLContext fournit un sous-ensemble du support SQL Spark) qui ne dépend pas de Hive.
-La séparation existe pour les utilisateurs pouvant être en conflit avec l'inclusion de toutes les dépendances de Hive.
-Les fonctionnalités supplémentaires de HiveContext qui ne figurent pas dans SQLContext incluent la possibilité d'écrire des requêtes à l'aide de l'analyseur plus complet HiveQL, l'accès aux fichiers UDF Hive et la possibilité de lire des données à partir de tables Hive.
-L'utilisation d'un contexte Hive ne nécessite pas une configuration Hive existante.
HiveContext est toujours le sur-ensemble de sqlcontext, il contient certaines propriétés supplémentaires telles qu'il peut lire la configuration à partir de Hive-site.xml, au cas où vous auriez une utilisation de Hive, sinon utilisez simplement sqlcontext