2016-11-07 103 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