Count (*) в одной и той же внешней таблице дает разные значения в spark.sql () и hive - PullRequest
0 голосов
/ 27 апреля 2019

Я работаю над кластером AWS с ульем и искрой.В предыдущий день я столкнулся со странной ситуацией, когда выполнял сценарий pyspark ETL над внешней таблицей в кусте.

У нас есть контрольная таблица, в которой есть столбец даты извлечения.И мы фильтруем данные из промежуточной таблицы (управляемая таблица в кусте, но ее местоположение - сегмент s3) на основе даты извлечения и загрузки в целевую таблицу, которая является внешней таблицей с данными, расположенными в сегменте s3.Мы загружаем таблицу, как показано ниже

spark.sql("INSERT OVERWRITE target_table select * from DF_made_from_stage_table")

Теперь, когда я проверил счетчик (*) по целевой таблице с помощью спарка, а также с помощью CLI прямого улья, оба дают различный счет

в искре:

 spark.sql("select count(1) from target") -- giving 50K records

в улье:

 select count(1) from target -- giving a count 50k - 100 

Примечание: периодически возникала проблема со статистикой по внешней таблице, которая давала -1 в качестве числа в улье.Это мы решили, запустив

ANALYZE TABLE target COMPUTE STATISTICS

Но даже после выполнения всех этих действий мы получаем original_count-100 в улье, где правильный счет в искре.

1 Ответ

0 голосов
/ 05 мая 2019

Произошла ошибка в DDL, используемом для внешней таблицы. "skip.header.line.count" = "1" был там в DDL, и у нас есть 100 выходных файлов. поэтому по 1 строке каждого файла были пропущены, что привело к исходному счету - 100 в улье, в то время как spark рассчитал его правильно. Удалено "skip.header.line.count" = "1" и его количество отсчетов, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...