我有一个包含orc文件的目录。我正在使用下面的代码创建一个Dataframe
var data = sqlContext.sql("SELECT * FROM orc.`/directory/containing/orc/files`");
它返回具有此模式的Dataframe
[_col0: int, _col1: bigint]
其中预期的模式是
[scan_nbr: int, visit_nbr: bigint]
当我查询Parquet格式的文件时,我得到了正确的模式。
是否缺少任何配置?
添加更多详细信息
这是hortonworks发行版HDP2.4.2(spark 1.6.1、hadoop 2.7.1、hive 1.2.1)
我们没有改变hdp的默认配置,但是这绝对不是hadoop的普通版本。
数据是由上游配置单元作业编写的,这是一个简单的cta(create table sample stored as orc as select…)。
我用最新的2.0.0配置单元在ctas生成的文件中测试了这个功能&它保留了orc文件中的列名。
5条答案
按热度按时间fumotvh31#
我们可以使用:
val df = hiveContext.read.table("tableName")
你的df.schema
或者df.columns
将给出实际的列名。q9yhzks02#
设置
解决了这个问题。
r7xajy2e3#
如果你也有Parquet地板版本,你可以复制列名,这就是我做的(同样,日期列是orc的分区键,所以必须将它移到末尾):
q9rjltbz4#
若版本升级不是一个可用的选项,那个么快速修复方法就是使用pig重写orc文件。这似乎很管用。
n6lpvg4x5#
问题是hive版本是1.2.1,它有一个错误hive-4243
这是在2.0.0中修复的。