Почему Spark передает данные обмена размером больше, чем необработанный размер при соединении? - PullRequest
4 голосов
/ 20 сентября 2019

Я выполняю широковещательное объединение двух таблиц 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

Затем я сделал объединение следующим образом:

select count(*) from A broadcast join B on A.segment_ids_hash = B.segment_ids_hash

enter image description here

Здесь размер данных широковещательного обмена составляет около 3,2 ГБ.

Мой вопрос заключается в том, почему размер данных широковещательного обмена (3,2 ГБ) намного больше, чем размер необработанных данных (~ 140MB).Какие накладные расходы?Есть ли способ уменьшить размер данных широковещательного обмена?

Спасибо

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