2016-07-21 9 views
2

Zu Vergleichszwecken angenommen, wir haben eine Tabelle "T" mit zwei Spalten "A", "B". Wir haben auch einen hiveContext in einer HDFS-Datenbank. Wir machen einen Datenrahmen:Spark DataFrame vs sqlContext

In der Theorie, welche der folgenden ist schneller:

sqlContext.sql("SELECT A,SUM(B) FROM T GROUP BY A") 

oder

df.groupBy("A").sum("B") 

wo "df" ein Datenrahmen zu T. Für diese einfache Art bezieht, ist von aggregierten Operationen, gibt es irgendeinen Grund, warum man eine Methode der anderen vorziehen sollte?

Antwort

3

Die Entwickler von Spark haben große Anstrengungen zur Optimierung unternommen. Die Leistung zwischen DataFrame Scala und DataFrame SQL ist nicht unterscheidbar. Auch bei DataFrame Python unterscheiden sich die Unterschiede bei der Datenerfassung für den Treiber.

Es öffnet sich eine neue Welt

It doesn't have to be one vs. another

Wir können nur wählen, was auch immer bequem wir mit

Der Leistungsvergleich von databricks veröffentlicht enter image description here

5

Nein, diese sollten auf den gleichen Ausführungsplan herunterkochen. Unterhalb der Spark-SQL-Engine wird die gleiche Optimierungs-Engine, der Catalyst Optimizer, verwendet. Sie können dies jederzeit selbst überprüfen, indem Sie die Funke-Benutzeroberfläche betrachten oder explain auf dem resultierenden DataFrame aufrufen.