2016-06-19 7 views
0

Ich versuche, Hive externe Tabelle von Spark-Anwendung zu erstellen und die Position als Variable an den SQL-Befehl übergeben. Es erstellt keine Hive-Tabelle und ich sehe keine Fehler.Spark Scala erstellen externen Hive-Tabelle arbeitet nicht mit Speicherort als Variable

val location = "/home/data" 
hiveContext.sql(s"""CREATE EXTERNAL TABLE IF NOT EXISTS TestTable(id STRING,name STRING) PARTITIONED BY (city string) STORED AS PARQUET LOCATION '${location}' """) 
+0

Haben Sie versucht, 'hdfs dfs -ls/home/data' es, um sicherzustellen, wurden geschaffen, nicht wahr? Was bringt das zurück? – javadba

Antwort

2

Funken unterstützt das Erstellen von nur verwaltet Tabellen. Und selbst dann gibt es strenge Einschränkungen: Es unterstützt dynamisch partitionierte Tabellen.

TL; DR Sie können nicht erstellen externe Tabellen durch Spark. Funken kannlesen sie

+0

Es funktioniert nicht durch Spark-Anwendung. Funktioniert innerhalb Hive –

+0

@GG Meine Antwort aktualisiert: daran erinnert, wird nicht funktionieren. – javadba

0

nicht sicher, welche Version diese Einschränkungen hatte. Ich benutze Spark 1.6, Hive 1.1.

Ich bin in der Lage, die externe Tabelle zu erstellen, folgen Sie bitte unter:

var query = "CREATE EXTERNAL TABLE avro_hive_table ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'TBLPROPERTIES ('avro.schema.url'='hdfs://localdomain/user/avro/schemas/activity.avsc') STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' LOCATION '/user/avro/applog_avro'" 
var hiveContext = new org.apache.spark.sql.hive.HiveContext(sc); 

hiveContext.sql(query); 
var df = hiveContext.sql("select count(*) from avro_hive_table");