Je suis une nouvelle abeille dans le monde Spark SQL. Je suis actuellement en train de migrer le code d'ingestion de mon application qui comprend l'ingestion de données dans la couche Stage, Raw et Application dans HDFS et de faire CDC (capture de données de changement), ceci est actuellement écrit dans les requêtes Hive et est exécuté via Oozie. Cela doit migrer vers une application Spark (version actuelle 1.6). L'autre section de code sera migrée plus tard.

Dans Spark-SQL, je peux créer des dataframes 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 dataframe et de réécrire le hql de cette manière.

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 y avait une couche supplémentaire de SQL que le moteur Spark Core doit traverser lors de l'utilisation directe de requêtes "SQL", ce qui peut avoir un impact sur les performances dans une certaine mesure, mais je n'ai trouvé aucun élément étayant cette affirmation. Je sais que le code serait beaucoup plus compact avec les API Datafrmae, mais lorsque j'ai mes requêtes hql à portée de main, cela vaut-il vraiment la peine d'écrire du code complet dans l'API Dataframe?

Merci.

22
PPPP 1 août 2017 à 09:49

2 réponses

Meilleure réponse

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 existe une étude comparative réalisée par Horton Works. source...

L'essentiel est basé sur la situation / scénario que chacun a raison. il n'y a pas de règle absolue pour en décider. les pls passent par ci-dessous ..

RDD, DataFrames et SparkSQL (en fait 3 approches et pas seulement 2):

À la base, Spark fonctionne sur le concept des ensembles de données distribués résilients, ou RDD:

  • Résilient - si les données en mémoire sont perdues, elles peuvent être recréées
  • Distribué - collection distribuée immuable d'objets en mémoire partitionnée sur de nombreux nœuds de données dans un cluster
  • Jeu de données - les données initiales peuvent être créées à partir de fichiers, être créées par programme, à partir de données en mémoire ou à partir d'un autre RDD

L'API DataFrames est un framework d'abstraction de données qui organise vos données en colonnes nommées:

  • Créer un schéma pour les données
  • Conceptuellement équivalent à une table dans une base de données relationnelle
  • Peut être construit à partir de nombreuses sources, y compris des fichiers de données structurées, des tables dans Hive, des bases de données externes ou des RDD existants
  • Fournit une vue relationnelle des données pour un SQL facile comme les manipulations et les agrégations de données
  • Sous le capot, c'est un RDD de Row's

SparkSQL est un module Spark pour le traitement de données structurées. Vous pouvez interagir avec SparkSQL via:

  • SQL
  • API DataFrames
  • API des ensembles de données

Résultats de test:

  • Les DataFrames et SparkSQL de RDD ont surperformé certains types de traitement de données
  • DataFrames et SparkSQL ont fonctionné à peu près de la même manière, bien qu'avec une analyse impliquant l'agrégation et le tri, SparkSQL ait un léger avantage

  • Syntaxiquement parlant, les DataFrames et SparkSQL sont beaucoup plus intuitifs que l'utilisation de RDD

  • A pris le meilleur sur 3 pour chaque test

  • Les temps étaient cohérents et peu de variation entre les tests

  • Les travaux ont été exécutés individuellement sans aucun autre travail en cours

Recherche aléatoire par rapport à 1 ID de commande parmi 9 millions d'ID de commande uniques GROUP tous les différents produits avec leur nombre total et leur tri décroissant par nom de produit

enter image description here

15
Leighton Ritchie 9 janv. 2020 à 16:56

Dans vos requêtes de chaîne Spark SQL, vous ne connaîtrez pas d'erreur de syntaxe avant l'exécution (ce qui pourrait être coûteux), alors que dans DataFrames, des erreurs de syntaxe peuvent être détectées au moment de la compilation.

13
Arun Sharma 28 mai 2018 à 21:07