[英]Spark - Avro Reads Schema but DataFrame Empty
我正在使用Gobblin從Oracle
定期提取關系數據,將其轉換為avro
並將其發布到HDFS
我的 dfs 目錄結構是這樣的
-tables
|
-t1
|
-2016080712345
|
-f1.avro
|
-2016070714345
|
-f2.avro
我正在嘗試像這樣閱讀它:
val sq = sqlContext.read.format("com.databricks.spark.avro")
.load("/user/username/gobblin/job-output/tables/t1/")
當我運行printSchema
我可以看到模式被正確解釋。
但是,當我運行count
或show
, DataFrames
為空。 我已經通過將.avro
文件轉換為JSON
來驗證它不是空的
java -jar avro-tools-1.7.7.jar tojson --pretty t1/20160706230001_append/part.f1.avro > t1.json
我懷疑它可能與目錄結構有關。 對於.avro
文件,Spark avro 庫可能只從根目錄向下看一層。 日志似乎表明驅動程序中只列出了 t1 下的目錄:
16/07/07 10:47:09 INFO avro.AvroRelation:在驅動程序上列出 hdfs://myhost.mydomain.com:8020/user/username/gobblin/job-output/tables/t1
16/07/07 10:47:09 INFO avro.AvroRelation:在驅動程序上列出 hdfs://myhost.mydomain.com:8020/user/username/gobblin/job-output/tables/t1/20160706230001_append
有沒有人經歷過類似的事情,或者知道如何解決這個問題? 我不得不指向低於t1
目錄,因為名稱是由時間戳生成的。
我遇到了同樣的問題。 雖然我不知道問題的確切原因,但有一種方法可以解決這個問題:
使用通配符並指向 avro 文件級別,而不是指向父目錄。
sqlContext.read.format("com.databricks.spark.avro")\
.load("/path/to/tables/t1/*/*.avro")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.