2016-11-07 106 views
0

任何人都在意冒险猜测为什么在Hive和Spark的数据帧API中执行的查询返回不同的结果(从Hive返回的答案是正确的)顺便提一下
Hive : gb-slo-svb-0019:10000 > select count(*) from sseft.feat_promo_prod_store_period; INFO - > select count(*) from sseft.feat_promo_prod_store_period _c0 84071294
星火: sqlContext.sql('select count(*) from sseft.feat_promo_prod_store_period').show() +---+ |_c0| +---+ | 0| +---+ Hive查询在通过spark执行时返回错误答案

有趣的是,如果我使用的火花,而不是蜂巢表我得到正确的答案指向底层的HDFS位置: sqlContext.read.parquet('/Lev4/sse/hive/sseft/feat_promo_prod_store_period').count() 84071294

该图像描述了所有三个:

enter image description here

回答

0

检查蜂房的site.xml,它应该被复制到火花conf目录下,它应该具有以下配置。

<configuration> 
    <property> 
    <name>hive.metastore.uris</name> 
    <value>thrift://host.xxx.com:9083</value> 
    </property> 
</configuration> 
1

,以确定是什么原因导致这种行为的最简单的方法是看explain()结果。比较这些:

sqlContext.sql('select * from sseft.feat_promo_prod_store_period').explain() 
sqlContext.read.parquet('/Lev4/sse/hive/sseft/feat_promo_prod_store_period').explain() 

如果他们是不一样的,你应该看看如何创建表,例如sqlConext.sql('show create table sseft.feat_promo_prod_store_period').first()

+0

这似乎已经与元数据的问题,即关于表的火花缓存 - 这理论基于这样一个事实,放弃表格并重新创建它解决了问题。不幸的是,如果我想出一个repro,我会尝试记住回到这里并报告它。 – jamiet