2

ich Gobblin bin mit periodisch relationalen Daten aus Oracle, wandeln es in avro und veröffentlichen es auf HDFSFunken - Avro Liest Schema aber Datenrahmen Leere

Meine dfs Verzeichnisstruktur sieht wie folgt aus

-tables 
    | 
    -t1 
    | 
    -2016080712345 
    | 
    -f1.avro 
    | 
    -2016070714345 
    | 
    -f2.avro 

zu extrahieren ich versuche, von ihm zu lesen, etwa so:

val sq = sqlContext.read.format("com.databricks.spark.avro") 
    .load("/user/username/gobblin/job-output/tables/t1/") 

Als ich printSchema ich betreibe kann sehen, dass das Schema korrekt interpretiert wird. Wenn ich count oder show ausführen, sind DataFrames leer. Ich habe festgestellt, dass die .avro Dateien nicht leer sind, indem es JSON

java -jar avro-tools-1.7.7.jar tojson --pretty t1/20160706230001_append/part.f1.avro > t1.json 

ich Umwandlung vermuten, dass es etwas zu tun mit der Verzeichnisstruktur haben kann. Vielleicht sehen die Spark-Avro-Bibliotheken nur eine Ebene unterhalb des Stammverzeichnisses für .avro-Dateien aus. Die Protokolle scheinen darauf hinzudeuten, dass nur die Verzeichnisse unter t1 auf dem Treiber aufgelistet wurden:

16/07/07 10:47:09 INFO avro.AvroRelation: Eintrag hdfs: //myhost.mydomain.com: 8020/user/username/gobblin/job-output/tables/t1 auf Treiber

16/07/07 10:47:09 INFO avro.AvroRelation: Auflistung hdfs: //myhost.mydomain.com: 8020/user/username/gobblin/job-output/tables/t1/20160706230001_append auf driver

Hat jemand etwas Ähnliches erfahren, oder wissen, wie man das umgehen kann? Ich müsste tiefer als das t1 Verzeichnis zeigen müssen, da die Namen von einem Zeitstempel generiert werden.

Antwort

0

Ich habe das gleiche Problem. Obwohl ich den genauen Grund für das Problem nicht kenne, gibt es eine Möglichkeit, dies zu umgehen:

Anstatt auf das übergeordnete Verzeichnis verweisen, verwenden Sie Platzhalter und zeigen Sie auf AVRO-Dateiebene.

sqlContext.read.format("com.databricks.spark.avro")\ 
    .load("/path/to/tables/t1/*/*.avro") 
Verwandte Themen