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")