通过spark执行时,Hive查询返回错误的答案

时间:2016-11-07 08:09:53

标签: apache-spark apache-spark-sql spark-dataframe hiveql

任何人都在担心猜测为什么在Hive和Spark的数据框架API中执行的查询会返回不同的结果(顺便说一句,从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| +---+

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

此图片描绘了所有三个:

enter image description here

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

检查你的hive-site.xml,它应该被复制到spark conf目录,它应该有以下配置。

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