2016-04-01 11 views
12

Così, quando si esegue da pyspark vorrei digitare (senza specificare alcun contesti):Spark può accedere alla tabella Hive dal pyspark ma non dalla scintilla presentare

df_openings_latest = sqlContext.sql('select * from experian_int_openings_latest_orc') 

.. e funziona benissimo.

Tuttavia, quando ho eseguito il mio script da spark-submit, come

spark-submit script.py ho messo il seguente in

from pyspark.sql import SQLContext 
from pyspark import SparkConf, SparkContext 
conf = SparkConf().setAppName('inc_dd_openings') 
sc = SparkContext(conf=conf) 
sqlContext = SQLContext(sc) 

df_openings_latest = sqlContext.sql('select * from experian_int_openings_latest_orc') 

ma mi dà un errore

pyspark.sql.utils. AnalysisException: u'Table non trovato: experian_int_openings_latest_orc; '

Quindi non vede il mio tavolo.

Cosa sto sbagliando? Si prega di aiutare

P.S. La versione di Spark è 1.6 in esecuzione su Amazon EMR

risposta

16

Spark 2.x

Lo stesso problema può verificarsi in Spark 2.x se è stato creato SparkSession senza enabling Hive support.

Spark 1.x

E 'abbastanza semplice. Quando si utilizza la shell PySpark e Spark è stato creato con il supporto Hive, l'implementazione predefinita SQLContext (quella disponibile come sqlContext) è HiveContext.

Nella propria applicazione standalone si utilizza semplicemente SQLContext che non fornisce funzionalità Hive.

Supponendo che il resto della configurazione è corretta basta sostituire:

from pyspark.sql import SQLContext 

sqlContext = SQLContext(sc) 

con

from pyspark.sql import HiveContext 

sqlContext = HiveContext(sc) 
+0

Grazie mille! :) – Dennis

1

Il tuo problema potrebbe essere correlato alle tue configurazioni Hive. Se le tue configurazioni utilizzano local metastore, la directory metastore_db viene creata nella directory da cui hai avviato il server Hive.

Poiché spark-submit viene avviato da una directory diversa, viene creato un nuovo metastore_db in quella directory che non contiene informazioni sulle tabelle precedenti.

Una soluzione rapida sarebbe quella di avviare il server Hive dalla stessa directory di spark-submit e ricreare le tabelle.

una correzione più permanente è fatto riferimento in questo SO Post

È necessario modificare la configurazione in $HIVE_HOME/conf/hive-site.xml

property name = javax.jdo.option.ConnectionURL 

property value = jdbc:derby:;databaseName=/home/youruser/hive_metadata/metastore_db;create=true 

Si dovrebbe ora essere in grado di eseguire alveare da qualsiasi luogo e ancora trovare le tabelle

8

In Spark 2.x (Amazon EMR 5+) vi imbatterete in questa edizione con spark-submit se non abilitare il supporto Hive in questo modo:

from pyspark.sql import SparkSession 
spark = SparkSession.builder.master("yarn").appName("my app").enableHiveSupport().getOrCreate() 
Problemi correlati