2015-11-12 13 views
37

Quali sono le differenze tra Apache Spark SQLContext e HiveContext?Qual è la differenza tra Apache Spark SQLContext e HiveContext?

Alcune fonti dicono che poiché HiveContext è un superset di SQLContext gli sviluppatori dovrebbero sempre usare HiveContext che ha più funzioni di SQLContext. Ma le attuali API di ogni contesto sono per lo più le stesse.

  • Quali sono gli scenari che SQLContext/HiveContext è più utile?
  • HiveContext è più utile solo quando si lavora con Hive?.
  • Oppure l'SQLContext è tutto ciò che serve per implementare un'app Big Data utilizzando Apache Spark?

risposta

29

Spark 2.0+

Spark 2.0 fornisce funzioni native finestra (SPARK-8641) e dispone di alcuni ulteriori miglioramenti in analisi e molto meglio rispetto SQL 2003, in modo che è significativamente meno dipendente Hive per raggiungere nucleo funcionality e a causa di quello HiveContext (SparkSession con supporto Hive) sembra essere leggermente meno importante.

Spark < 2,0

Ovviamente se si desidera lavorare con Hive è necessario utilizzare HiveContext. Oltre a ciò, la più grande differenza per ora (Spark 1.5) è il supporto per window functions e la possibilità di accedere alle UDF di Hive.

In generale le funzioni di finestra sono una funzionalità piuttosto interessante e possono essere utilizzate per risolvere problemi piuttosto complessi in modo conciso senza andare avanti e indietro tra RDD e DataFrames. Le prestazioni sono ancora lontane dall'ottimizzazione, in particolare senza la clausola PARTITION BY, ma in realtà non sono specifiche di Spark.

Per quanto riguarda le UDF di Hive, non è un problema serio ora, ma prima di Spark 1.5 molte funzioni SQL sono state espresse utilizzando UDF Hive e richiesto HiveContext per funzionare.

HiveContext fornisce anche parser SQL più robusto. Vedere ad esempio: py4j.protocol.Py4JJavaError when selecting nested column in dataframe using select statetment

Infine è necessario HiveContext per avviare il server di risparmio.

Il problema più grande con HiveContext è che viene fornito con grandi dipendenze.

+0

Dal tuo commento, sembra L'unico svantaggio di HiveContext è che si tratta di grandi dipendenze. Oltre a questo, è una scommessa sicura utilizzare sempre HiveContext invece di SqlContext. Sto eseguendo l'ambiente SparkR 1.6. –

+0

Da https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-sql-SparkSession.html "SparkSession ha unito SQLContext e HiveContext in un oggetto in Spark 2.0." –

3

Durante la programmazione con Spark SQL sono disponibili due punti di ingresso in base a se è necessario il supporto Hive. Il punto di ingresso consigliato è HiveContext a fornire l'accesso a HiveQL e altre funzionalità dipendenti da Hive. Il più semplice base SQLContext fornisce un sottoinsieme del supporto Spark SQL che non dipende dall'hive .

-La separazione esiste per gli utenti che potrebbero avere conflitti con l'inclusione di tutte le dipendenze di Hive nello .

-Le funzionalità aggiuntive di HiveContext che non si trovano in SQLContext includono la possibilità di scrivere query utilizzando il parser HiveQL più completo, l'accesso alle UDF di Hive e la capacità di leggere i dati dalle tabelle Hive.

-Utilizzo di un HiveContext non richiede una configurazione Hive esistente.

+0

per ulteriori letture consultare https://spark.apache.org/docs/1.6.1/sql-programming-guide.html – BigDataScholar

+0

anche il contesto sql non richiede la configurazione dell'alveare – anubhav

3

HiveContext è ancora il superset di SqlContext, contiene alcune proprietà extra come si può leggere la configurazione da alveare-site.xml, nel caso in cui si dispone di uso alveare altrimenti è sufficiente utilizzare SqlContext

Problemi correlati