У меня есть две таблицы в spark:
T1
|--x1
|--x2
T2
|--z1
|--z2
- T1 намного больше, чем T2
- Значения в столбце z2 очень большие
- Существует отношение Многие-Один между T1 и T2 соответственно (через столбцы x2 и z1).
Я выполняю следующий запрос:
select T1.x1, T2.z2 from T1
join T2 on T1.x2 = T2.z1
В результирующем наборе данных одно и то же значение из T2.z2 будет умножено на множество значений T1.x1.
Поскольку это значение очень тяжелое, меня беспокоит, действительно ли данные дублируются или существуют внутренние оптимизации, поддерживающие только ссылки?
Обратите внимание, что я не спрашиваю о том, как будет оцениваться выражение соединения. Учитывая, что мой набор результатов будет иметь повторяющиеся значения из-за искры соединения, фактически дублируются данные или только ссылки.
То, как это оценивается, имеет основополагающее значение для ответа
Справедливо. Предположим, что данные не сериализованы — они все еще дублируются? кроме того, даже если данные представлены в сериализованной форме, абсолютно возможно пометить определенные значения как ссылки на «одиночное» значение. Поскольку RDD и фреймы данных неизменяемы, кажется правильным реализовать такую оптимизацию. В любом случае, я все равно собираюсь проверить синтетический эксперимент, но надеялся, что есть какая-то документация по этому поводу.