2016-09-13 7 views
4

hadoopクラスタ間でハイブテーブルを転送するジョブがあります。 ソースhadoopクラスタからorcファイルをダウンロードし、次のコマンドを使用してorcファイルをターゲットhdfsクラスタにアップロードしました。スキーマを指定せずにorcファイルからハイブテーブルを作成する

hadoop fs -get 
hadoop fs -put 

ターゲットのHadoop CLUSTRにおけるORCファイルがスパークアプリケーションで以下のようにして読み出すことができる。

df = sqlContext.sql('select * from orc.`path_to_where_orc_file_is`') 

しかし、対応するテーブルは、ターゲットHadoopクラスタにハイブ内に存在しません。

ddlまたはスキーマを指定せずに、hdfsのorcファイルからハイブにテーブルを作成する方法はありますか? orcファイル自体にスキーマ情報が含まれているため。

元のハイブテーブルのスキーマがかなり入れ子になっていて、多くのフィールドがあるので、この質問をしているのはその理由です。

現在、私は考えることができる唯一のソリューションは、火花のものオークファイルを読み込み、以下のようsaveAsTableオプションでそれらを書き出している:

dfTable.write.format("orc").mode(SaveMode.Overwrite).saveAsTable("db1.test1") 

答えて

0
val table= spark.read.orc("hdfspath") 
table.printSchema 

表は、データフレームであり、スキーマを持っていますそれ。

関連する問題