2016-08-19 3 views
1

Der Code unten ist, wie es in HDFS mit Scala geschrieben wurde. Wie lautet die HQL-Syntax zum Erstellen einer Hive-Tabelle zum Abfragen dieser Daten?Wie erstelle ich eine Hive-externe Tabelle aus AVRO-Dateien, die mit Databricks geschrieben wurden?

import com.databricks.spark.avro._ 
val path = "/user/myself/avrodata" 
dataFrame.write.avro(path) 

Die Beispiele, die ich finden erfordern eine avro.schema.literal bietet das Schema oder eine avro.schema.url dem eigentlichen avro Schema zu beschreiben.

In der Funken Schale alles, was ich dies tun müssen, wäre zu lesen ist:

scala> import com.databricks.spark.avro._ 
scala> val df = sqlContext.read.avro("/user/myself/avrodata") 
scala> df.show() 
+0

Ein Kommentar aus dem Spark-Avro-Quellcode besagt, dass * "Schema-Evolution noch nicht unterstützt wird. Hier wählen wir nur eine Stichprobe aus, um ** das Schema ** des gesamten Datensatzes herauszufinden" * (https://github.com/databricks/spark-avro/blob/master/src/main/scala/com/databricks/spark/avro/DefaultSource.scala). –

+0

Hive funktioniert nicht so, es erfordert ** explizit ** das aktuelle AVRO-Schema zum Zeitpunkt CREATE. Aber die Dokumentation (https://cwiki.apache.org/confluence/display/Hive/AvroSerDe) besagt, dass es zwei Möglichkeiten gibt, dies zu tun: Entweder eine Verknüpfung zu einem AVRO-Schema (verfügbar in einer lokalen Datei/in einer URL), oder listen Sie die Spalten einfach auf, als ob es eine Textdatei wäre, und lassen Sie Hive das AVRO-Schema von diesem SQL-Schema ableiten. –

Antwort

0

So betrogen ich diese Arbeit zu bekommen. Im Grunde habe ich eine temporäre Tabelle erstellt und HQL verwendet, um die Daten aus der temporären Tabelle zu erstellen und einzufügen. Diese Methode verwendet die Metadaten aus der temporären Tabelle und erstellt die Avro-Zieltabelle, die ich erstellen und füllen wollte. Wenn der Datenrahmen aus seinem Schema eine temporäre Tabelle erstellen kann, warum kann er die Tabelle nicht als Avro speichern?

Verwandte Themen