我正在使用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
我怀疑它可能与目录结构有关。也许Spark avro库只从.avro
文件的根目录下来一层。日志似乎表明驱动程序中只列出了t1下的目录:
16/07/07 10:47:09 INFO avro.AvroRelation:列出hdfs://myhost.mydomain.com:8020 / user / username / gobblin / job-output / tables / t1 on driver
16/07/07 10:47:09 INFO avro.AvroRelation:列出hdfs://myhost.mydomain.com:8020 / user / username / gobblin / job-output / tables / t1 / 20160706230001_append on driver
有没有人经历过类似的事情,或者知道如何解决这个问题?我必须指向低于t1
目录,因为名称是由时间戳生成的。
答案 0 :(得分:0)
我遇到了同样的问题。虽然我不知道问题的确切原因,但有办法解决这个问题:
不使用指向父目录,而是使用通配符并指向avro文件级别。
sqlContext.read.format("com.databricks.spark.avro")\
.load("/path/to/tables/t1/*/*.avro")