2016-08-02 7 views
3

のスキーマを読んでいません。私は次のことを実行するとHiveContextがOrcfile

val df1 = sqlContext.read.format("orc").load(myPath) 
df1.columns.map(m => println(m)) 

などの実名とは対照的に、列が「_col0」、「_col1」、「_col2」などと印刷されています'empno'、 'name'、 'deptno'。

ハイブで「mytableを記述しているとき」は列名を正しく表示しますが、「orcfiledump」を実行すると_col0、_col1、_col2も表示されます。私は 'スキーマを読んでいる'か何かを指定する必要がありますか?はいの場合、Spark/Scalaでどのようにすればいいですか?

hive --orcfiledump /apps/hive/warehouse/mydb.db/mytable1 
..... 
fieldNames: "_col0" 
fieldNames: "_col1" 
fieldNames: "_col2" 

注:次のように私は、テーブルを作成しました:

create table mydb.mytable1 (empno int, name VARCHAR(20), deptno int) stored as orc; 

注:答えが「ハイブ」を使用するように私に語ったので、これは、この問題(Hadoop ORC file - How it works - How to fetch metadata)の複製ではありません&私はすでに午前次のようにHiveContextを使用する:

val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc) 

をちなみに、私は次のものが含ま私自身のハイブ-site.xmlのを、使用しています:

<configuration> 
    <property> 
     <name>hive.metastore.uris</name> 
     <value>thrift://sandbox.hortonworks.com:9083</value> 
    </property> 
</configuration> 
+1

[HadoopのORCファイルの可能な複製 - どのように動作するのか - メタデータを取得する方法](http://stackoverflow.com/questions/30094604/hadoop- – zero323

+0

私はこれをすでに読んでいますが、 "HiveやHCatalogを使用して作成、読み込み...."と書かれています。しかし、私はHiveContextを使って読み込みます。では、この答えはどのように私を助けますか?説明してください。 – DilTeam

+0

スキーマはメタストアに格納されているため、両方の操作で同じメタストアを使用しないことを意味します。 – zero323

答えて

0

私は問題が何かを理解しました。それはテストデータを作成する方法でした。私は、次のコマンドを実行した場合という印象の下にあった:

create table mydb.mytable1 (empno int, name VARCHAR(20), deptno int) stored as orc; 

INSERT INTO mydb.mytable1(empno, name, deptno) VALUES (1, 'EMP1', 100); 
INSERT INTO mydb.mytable1(empno, name, deptno) VALUES (2, 'EMP2', 50); 
INSERT INTO mydb.mytable1(empno, name, deptno) VALUES (3, 'EMP3', 200); 

データでORC形式で作成されます:/apps/hive/warehouse/mydb.db/mytable1

が判明しますそうではありません。 「orcとして格納されている」と表示しても、INSERT文は列情報を保存しませんでした。それが予想される動作であるかどうかは不明です。いずれにせよ、それはすべて今働きます。混乱のお詫びは、うまくいけば、これは将来的に誰かを助けるでしょう - :)

関連する問題