我正在创建DataFrame
并使用temp
将该DataFrame注册为df.createOrReplaceTempView('mytable')
视图。之后,我尝试使用以下查询将'mytable'
中的内容写入Hive表(它具有分区)
insert overwrite table
myhivedb.myhivetable
partition(testdate) // ( 1) : Note here : I have a partition named 'testdate'
select
Field1,
Field2,
...
TestDate //(2) : Note here : I have a field named 'TestDate' ; Both (1) & (2) have the same name
from
mytable
当我执行此查询时,我收到以下错误
Exception in thread "main" org.apache.hadoop.hive.ql.metadata.Table$ValidationFailureSemanticException: Partition spec
{testdate=, TestDate=2013-01-01}
由于字段名称相同,我看起来遇到此错误;即testdate
(Hive中的分区)& TestDate
(临时表'mytable'中的字段)
如果我的分区名称testdate
与字段名称不同(即TestDate
),则查询将成功执行。实施例...
insert overwrite table
myhivedb.myhivetable
partition(my_partition) //Note here the partition name is not 'testdate'
select
Field1,
Field2,
...
TestDate
from
mytable
我的猜测是它看起来像Spark中的Bug ...但是想得到第二意见......我在这里错过了一些东西吗?
答案 0 :(得分:0)
@DuduMarkovitz @dhee;为回应迟到而道歉。我终于能够解决这个问题了。之前我使用cameCase(在CREATE语句中)创建表,这似乎是Exception的原因。现在我使用DDL创建了表,其中字段名称是小写的。这解决了我的问题