Я выполняю широковещательное объединение двух таблиц A и B. B - это кэшированная таблица, созданная с использованием следующего Spark SQL:
create table B as select segment_ids_hash from stb_ranker.c3po_segments
where
from_unixtime(unix_timestamp(string(dayid), 'yyyyMMdd')) >= CAST('2019-07-31 00:00:00.000000000' AS TIMESTAMP)
and
segmentid_check('(6|8|10|12|14|371|372|373|374|375|376|582|583|585|586|587|589|591|592|594|596|597|599|601|602|604|606|607|609|610|611|613|615|616)', seg_ids) = true
cache table B
Столбец'gment_ids_hash 'имеет целочисленный тип, и результат содержит36,4 миллиона записей.Размер кэшированной таблицы составляет около 140 МБ, как показано ниже ![enter image description here](https://i.stack.imgur.com/anS9L.png)
Затем я сделал объединение следующим образом:
select count(*) from A broadcast join B on A.segment_ids_hash = B.segment_ids_hash
Здесь размер данных широковещательного обмена составляет около 3,2 ГБ.
Мой вопрос заключается в том, почему размер данных широковещательного обмена (3,2 ГБ) намного больше, чем размер необработанных данных (~ 140MB).Какие накладные расходы?Есть ли способ уменьшить размер данных широковещательного обмена?
Спасибо