Size: a a a

2021 August 13

ИК

Иван Калининский... in Moscow Spark
Даже если поле является полем партиционирования, то есть сохранено в виде названия папки в файловой системе или объектном хранилище, спарк знает об этом только ДО начала выполнения запроса. Информация о партиционировании может быть использована только для прунинга партиций, когда значения указаны явно, в виде литералов.

В ходе выполнения запроса спарк прочитает в RDD все строки, в которых будут указанные в запросе поля из файлов (или ни одного поля, если они не указаны), добавит к ним все поля партиционирования (начиная с этого момента это точно такие же поля, как все остальные). С этим RDD и будет выполняться в дальнейшем вся работа, все вычисления. Это сделано для универсальности, а не для оптимизации.

Сделать так, чтобы спарк работал с полями партиций, не создавая итераторы по всем записям можно только расширениями. DataSource кастомный, или что-то вроде Iceberg для хранения (но это не точно)
источник

SI

Sergey Ivanychev in Moscow Spark
Стоп, я до этого момента думал, что спарк берет пути файлов каждой партиции из хайва — там есть таблица партиций таблиц
источник

SI

Sergey Ivanychev in Moscow Spark
```
SELECT *
FROM PARTITIONS
INNER JOIN
(
   
SELECT *
   
FROM TBLS
   
WHERE TBL_NAME = 'table'
   
) AS T
WHERE T.TBL_ID = PARTITIONS.TBL_ID
```

В терминах SQL в Hive Metastore БД
источник

SI

Sergey Ivanychev in Moscow Spark
И там дальше для каждой PART_ID будет записи с файлами для нее
источник

ИК

Иван Калининский... in Moscow Spark
Да, это так. Но RDD всё равно будет создан на основе файлов с данными. Вдруг будет пустая партиция, или пользователь заперсистит датафрейм и потом будет делать count или sum или ещё что-то. На основе метаинформации спарк делает только прунинг, работа со значениями партиций напрямую не производится
источник

ИК

Иван Калининский... in Moscow Spark
Если сделать через jdbc такой запрос, то без проблем можно работать со значениями партиций. Но это именно метаданные, не сами данные
источник

SI

Sergey Ivanychev in Moscow Spark
Меня удивляет, что в Hive SQL JDBC (без спарка) `SELECT MIN(partition_date) FROM table` тоже работает адски медленно
источник

SI

Sergey Ivanychev in Moscow Spark
Как будто хайв сам тоже идет читать файлы
источник

ИК

Иван Калининский... in Moscow Spark
Тут не скажу точно, но, походу, именно так и происходит, по тем же соображениям универсальности подхода
источник

SI

Sergey Ivanychev in Moscow Spark
интересно, спасибо
источник

NN

No Name in Moscow Spark
Ты когда свою книжку напишешь с разбором начинки спарка?

Я заранее готов купить
источник

ИК

Иван Калининский... in Moscow Spark
Вдруг минимальные партиции будут пустые (очистить папку в hdfs - как не фиг делать)) , в этом случае нельзя их выводить как минимальные. А это можно выяснить только обратившись к файлам с данными
источник

ИК

Иван Калининский... in Moscow Spark
Боюсь облажаться((
источник

NN

No Name in Moscow Spark
Найдем тут сильного ревьюера, и будет топчик вообще.
Лучше тебя я пока тут ещё никого не видел, кто бы так распотрошил начинку и достаточно доступно донес суть
источник

ДД

Джон Дориан... in Moscow Spark
Сыглы, тоже купил бы)
источник

NN

No Name in Moscow Spark
Можно начать с выкладывания статеек в блодик на медиуме, например. А там и со временем материал на книгу наберётся.
источник

ИК

Иван Калининский... in Moscow Spark
Так это надо делать что-то))
Ладно, попробую для начала на хабре, официально. Черновик уже есть
источник

А

Алексей in Moscow Spark
+
источник

NN

No Name in Moscow Spark
Если помощь какая понадобится - обращайся, я бы тоже немного копнул в детали в свободное время.
источник

PK

Pavel Klemenkov in Moscow Spark
Собирай краудфандинг. Возьмёшь отпуск за свой счёт на месяцок. Думаю мы навалимся )
источник