2

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 ライブラリは、ルートから 1 レベル下の.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名前はタイムスタンプによって生成されるため、ディレクトリより下を指さなければなりません。

4

1 に答える 1

0

同じ問題が発生しています。問題の正確な理由はわかりませんが、これを回避する方法があります。

親ディレクトリを指す代わりに、ワイルドカードを使用して avro ファイル レベルを指します。

sqlContext.read.format("com.databricks.spark.avro")\
    .load("/path/to/tables/t1/*/*.avro")
于 2016-10-26T21:31:04.897 に答える