Je suis une nouvelle abeille dans le monde Spark SQL. Je migre actuellement le code Ingestion de mon application qui comprend l'ingestion de données en phase, la couche Raw et Application en HDFS et le CDC (changement de capture de données), ceci est actuellement écrit dans les requêtes Hive et est exécuté via Oozie. Cela doit migrer dans une application Spark (version actuelle 1.6). L'autre section du code migrera plus tard.
Dans spark-SQL, je peux créer des cadres de données directement à partir de tables dans Hive et simplement exécuter des requêtes telles quelles (comme sqlContext.sql("my Hive hql")
). L'autre façon serait d'utiliser les API de dataframe et de réécrire le hql de cette façon.
Quelle est la différence entre ces deux approches?
Y a-t-il un gain de performances avec l'utilisation des API Dataframe?
Certaines personnes ont suggéré qu'il existe une couche supplémentaire de SQL que le moteur de base spark doit utiliser lors de l'utilisation directe de requêtes "SQL", ce qui peut avoir une incidence sur les performances dans une certaine mesure, mais je n'ai trouvé aucun élément Je sais que le code serait beaucoup plus compact avec les API Datafrmae mais quand j'ai mes requêtes hql à portée de main, cela vaudrait-il vraiment la peine d'écrire du code complet dans l'API Dataframe?
Merci.
Question: Quelle est la différence entre ces deux approches? Y a-t-il un gain de performances avec l'utilisation des API Dataframe?
Répondre :
Il y a une étude comparative réalisée par horton works. source ...
L'essentiel est basé sur la situation/le scénario, chacun a raison. il n'y a pas de règle dure et rapide pour en décider. pls passer par ci-dessous ..
À la base, Spark fonctionne sur le concept de jeux de données distribués résilients, ou RDD:
L'API DataFrames est un cadre d'abstraction de données qui organise vos données en colonnes nommées:
SparkSQL est un module Spark pour le traitement de données structurées. Vous pouvez interagir avec SparkSQL via:
Les DataFrames et SparkSQL ont réalisé à peu près la même chose, bien qu'avec l'analyse impliquant l'agrégation et le tri, SparkSQL avait un léger avantage
Syntaxiquement parlant, DataFrames et SparkSQL sont beaucoup plus intuitifs que l’utilisation de RDD
A pris le meilleur des 3 pour chaque test
Les temps étaient cohérents et ne variaient pas beaucoup entre les tests
Les travaux ont été exécutés individuellement sans aucun autre travail en cours d'exécution
Recherche aléatoire contre 1 ID de commande parmi 9 millions d'ID de commande unique GROUPE tous les différents produits avec leur nombre total et tri décroissant par nom de produit
Dans vos Spark requêtes de chaîne SQL, vous ne connaîtrez pas d'erreur de syntaxe avant l'exécution (ce qui pourrait être coûteux), tandis que dans DataFrames, des erreurs de syntaxe peuvent être détectées au moment de la compilation.
Si la requête est longue, alors l'écriture efficace de la requête en cours d'exécution ne sera pas possible. D'un autre côté, DataFrame, avec l'API Column, aide le développeur à écrire du code compact, ce qui est idéal pour les applications ETL.
En outre, toutes les opérations (par exemple supérieures à, inférieures à, sélectionnez, où etc.) .... exécutées à l'aide de "DataFrame" construisent un " arbre de syntaxe abstraite (AST) ", qui est ensuite passé à" Catalyst "pour d'autres optimisations. (Source: Spark Livre blanc SQL, Section # 3.)