Quelle est la différence entre Apache Spark SQLContext et HiveContext?

Quelles sont les différences entre Apache Spark SQLContext et HiveContext?

Certaines sources affirment que puisque HiveContext est un sur-ensemble de SQLContext, les développeurs doivent toujours utiliser HiveContext, qui a plus de fonctionnalités que SQLContext. Mais les API actuelles de chaque contexte sont pour la plupart identiques.

  • Quels sont les scénarios que SQLContext / HiveContext est plus utile?
  • HiveContext est-il plus utile uniquement lorsque vous travaillez avec Hive?
  • Ou est-ce que SQLContext est tout ce qu’il faut pour implémenter une application Big Data utilisant Apache Spark?

Spark 2.0+

Spark 2.0 fournit des fonctions de fenêtre natives ( SPARK-8641 ) et propose des améliorations supplémentaires en termes d’parsing et de bien meilleure conformité à SQL 2003, de sorte qu’il est beaucoup moins dépendant de Hive pour atteindre des fonctionnalités de base et que HiveContext ( SparkSession avec 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 pour le moment (Spark 1.5) est la prise en charge des fonctions de fenêtre et la possibilité d’accéder aux UDF Hive.

D’une 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 faire de va-et-vient entre les RDD et les DataFrames. Les performances sont encore loin d’être optimales, surtout sans la clause PARTITION BY , mais ce n’est vraiment rien de spécifique à Spark.

En ce qui concerne les UDF Hive, ce n’est pas un problème grave à l’heure actuelle, mais avant Spark 1.5, de nombreuses fonctions SQL ont été exprimées avec les UDF Hive et ont nécessité le HiveContext de HiveContext .

HiveContext fournit également un parsingur SQL plus robuste. Voir par exemple: py4j.protocol.Py4JJavaError lors de la sélection d’une colonne nestede dans dataframe à l’aide de select statetment

Enfin, HiveContext est requirejs pour démarrer le serveur Thrift.

Le plus gros problème avec HiveContext est qu’il comporte de grandes dépendances.

Lorsque vous programmez avec Spark SQL, nous avons deux points d’entrée selon que nous avons besoin de l’assistance Hive. Le point d’entrée recommandé est HiveContext pour permettre l’access à HiveQL et aux autres fonctionnalités dépendantes de Hive. Le plus simple SQLContext fournit un sous-ensemble du support Spark SQL qui ne dépend pas de Hive.

-La séparation existe pour les utilisateurs qui pourraient avoir des conflits avec l’inclusion de toutes les dépendances Hive.

Les fonctionnalités supplémentaires de HiveContext qui ne se trouvent pas dans SQLContext incluent la possibilité d’écrire des requêtes à l’aide de l’parsingur HiveQL plus complet, l’access aux UDF Hive et la possibilité de lire les données des tables Hive.

-Utiliser HiveContext ne nécessite pas de 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 depuis hive-site.xml, au cas où vous utiliseriez hive, utilisez simplement simplement sqlcontext