Ich habe einen einfachen Scala-Code, der Daten aus der Hive-Datenbank abruft und eine RDD aus der Ergebnismenge erstellt. Es funktioniert gut mit HiveContext. Der Code ähnelt diesem:Wie die Datenbank in SparkSQL über Hive in Spark 1.3 angegeben werden
val hc = new HiveContext(sc)
val mySql = "select PRODUCT_CODE, DATA_UNIT from account"
hc.sql("use myDatabase")
val rdd = hc.sql(mySql).rdd
Die Version von Spark, die ich verwende, ist 1.3. Das Problem ist, dass die Standardeinstellung für hive.execution.engine 'mr' ist, die Hive veranlasst, MapReduce zu verwenden, was langsam ist. Leider kann ich es nicht zwingen, "Funken" zu benutzen. Ich habe versucht, SQLContext zu verwenden, indem ich hc = new SQLContext (sc) ersetze, um zu sehen, ob sich die Leistung verbessert. Mit dieser Änderung der Linie
hc.sql("use myDatabase")
wirft die folgende Ausnahme:
Exception in thread "main" java.lang.RuntimeException: [1.1] failure: ``insert'' expected but identifier use found
use myDatabase
^
Die Spark 1.3 Dokumentation sagt, dass SparkSQL mit Hive Tabellen arbeiten können. Meine Frage ist, wie ich angeben soll, dass ich eine bestimmte Datenbank anstelle der Standarddatenbank verwenden möchte.
Haben Sie versucht, den regulären Hive Syntax zB 'Select * von mydb.mytable'? –
Ja - einen weiteren Fehler erhalten: java.lang.RuntimeException: Tabelle nicht gefunden: myDatabase.account –