簡體   English   中英

Spark - Avro 讀取架構但數據幀為空

[英]Spark - Avro Reads Schema but DataFrame Empty

我正在使用GobblinOracle定期提取關系數據,將其轉換為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我可以看到模式被正確解釋。

但是,當我運行countshowDataFrames為空。 我已經通過將.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM