任何人都在担心猜测为什么在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
此图片描绘了所有三个:
答案 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>