Spark sql query vs funzioni dataframe

Per ottenere buone prestazioni con Spark. Mi chiedo se è bene usare query SQL tramite SQLContext o se è meglio fare query tramite funzioni df.select() come df.select() .

Qualche idea? 🙂

Non c’è nessuna differenza di prestazioni. Entrambi i metodi utilizzano esattamente lo stesso motore di esecuzione e le strutture di dati interne. Alla fine della giornata tutto si riduce alle preferenze personali.

  • Probabilmente le query DataFrame sono molto più semplici da build a livello di DataFrame e forniscono una sicurezza di tipo minimale.

  • Le semplici query SQL possono essere significativamente più concise e più facili da capire. Esistono anche portatili e possono essere utilizzati senza modifiche con tutte le lingue supportate. Con HiveContext questi possono anche essere utilizzati per esporre alcune funzionalità che possono essere inaccessibili in altri modi (ad esempio UDF senza wrapper Spark).

Idealmente, il catalizzatore di Spark dovrebbe ottimizzare entrambe le chiamate allo stesso piano di esecuzione e le prestazioni dovrebbero essere le stesse. Come chiamare è solo una questione di stile. In realtà, vi è una differenza in base al rapporto di Hortonworks ( https://community.hortonworks.com/articles/42027/rdd-vs-dataframe-vs-sparksql.html ), in cui SQL supera i Dataframes per un caso in cui È necessario disporre di record raggruppati con i rispettivi CONTI che sono SORT DISCENDING in base al nome del record.

Usando DataFrame, si può infrangere l’SQL in più istruzioni / interrogazioni, il che aiuta nel debug, nei miglioramenti e nella manutenzione del codice.

La rottura di query SQL complesse in query più semplici e l’assegnazione del risultato a un DF offre una migliore comprensione.

Suddividendo la query in più DF, gli sviluppatori ottengono il vantaggio di utilizzare la cache, la riparazione (per distribuire uniformsmente i dati tra le partizioni utilizzando la chiave univoca / quasi-unica).