2016-11-07 4 views
0

Любой, кто может опасаться, почему запрос, выполненный как в Hive, так и с API-интерфейсом Spark, возвращает разные результаты (ответ верен из 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
Spark: sqlContext.sql('select count(*) from sseft.feat_promo_prod_store_period').show() +---+ |_c0| +---+ | 0| +---+ Запрос на улей возвращает неправильный ответ при выполнении через искру

Интересно, если я указываю на место, лежащие в основе HDFS с помощью искры, а не таблицы улья я получаю правильный ответ: sqlContext.read.parquet('/Lev4/sse/hive/sseft/feat_promo_prod_store_period').count() 84071294

Это изображение иллюстрирует все три:

enter image description here

ответ

0

проверить улей-site.xml, он должен быть скопирован в каталог искру конф и он должен иметь следующую конфигурацию.

<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

Это, кажется, были проблемы с метаданными, искровые кэши о столе - что теория основана на том, что падение таблицы и воссоздание ее решают проблему. К сожалению, я не смог воспроизвести проблему, если придумаю репродукцию, я попытаюсь вспомнить, чтобы вернуться сюда и сообщить об этом. – jamiet