Исключите кэширование данных, выполнив несколько запросов в разных потоках - PullRequest
0 голосов
/ 09 марта 2020

Я хочу знать, является ли кэширование данных в спрей поточно-ориентированным. В одном из наших вариантов использования я создаю фрейм данных из таблицы кустов, а затем запускаю несколько SQL в одном и том же фрейме для разных потоков. Поскольку наше хранилище и вычисления не связаны, а чтение по некоторым причинам происходит очень медленно, я думал о кэшировании кадра данных в памяти и использовании кэшированного кадра данных для всех запросов. Кэширование данных безопасно для потоков? Есть ли другие подводные камни в этом? У меня в вычислительном кластере достаточно памяти (диска и оперативной памяти) для кэширования таблицы, и я буду выполнять более 10 запросов на одном и том же кадре данных.

Спасибо,

Ака sh

1 Ответ

0 голосов
/ 10 марта 2020

Re: «Я хочу знать, является ли кэширование данных в Spark поточно-ориентированным.»

Всякий раз, когда вы конфигурируете ядра исполнителя, вы используете несколько потоков для обработки данных на каждом исполнителе. Это означает, что в обычном сценарии SPARK SQL также DAG обрабатывается с использованием нескольких потоков.

Кэширование не должно оказывать никакого влияния на безопасность потоков. Кроме того, DataFrames также являются неизменными, как RDD, поэтому вы не меняете данные в существующем кадре данных, а создаете новый.

Следовательно, даже после кэширования, когда вы создаете несколько потоков для выполнения разных SQL-запросов на одном и том же кадре данных, каждый поток начнется с этапа кэширования и вычислит новый на основе вашего SQL.

...