次を実行すると:
val df1 = sqlContext.read.format("orc").load(myPath)
df1.columns.map(m => println(m))
列は、'empno'、'name'、'deptno' などの実際の名前とは対照的に、'_col0'、'_col1'、'_col2' などとして出力されます。
Hive で「describe 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 ファイル - 仕組み - メタデータのフェッチ方法) の複製ではありません。回答では、「Hive」を使用するように指示されており、次のように既に HiveContext を使用しているためです。
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
ところで、私は以下を含む独自の hive-site.xml を使用しています。
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://sandbox.hortonworks.com:9083</value>
</property>
</configuration>