Я использую 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: Listing hdfs: //myhost.mydomain.com: 8020 / user / username / gobblin / job-output / tables / t1 на драйвере
16/07/07 10:47:09 INFO avro.AvroRelation: Listing hdfs: //myhost.mydomain.com: 8020 / user / username / gobblin / job-output / tables / t1 / 20160706230001_append для драйвера
Кто-нибудь испытывал нечто подобное или знает, как это обойти? Я бы не стал указывать ниже, чем каталог t1
, потому что имена генерируются меткой времени.