Как spark считывает данные за кулисами?

#apache-spark #amazon-s3 #pyspark

Вопрос:

Я немного смущен тем, как, например, spark считывает данные из s3. Допустим, из s3 нужно прочитать 100 ГБ данных, а общий объем памяти кластера spark составляет 30 ГБ. Будет ли spark считывать все 100 ГБ данных после запуска действия и сохранять максимальное количество разделов в памяти, а остальное выкладывать на диск, или он будет считывать только те разделы, которые может хранить в памяти, обрабатывать их, а затем считывать остальные данные? Любая ссылка на какую-либо документацию будет высоко оценена.

Ответ №1:

Об этом есть вопрос в разделе часто задаваемых вопросов Spark:

Должны ли мои данные помещаться в память, чтобы использовать Spark?

Нет. Операторы Spark сбрасывают данные на диск, если они не помещаются в память, что позволяет им хорошо работать с данными любого размера. Аналогичным образом, кэшированные наборы данных, которые не помещаются в память, либо выводятся на диск, либо при необходимости пересчитываются на лету, как это определяется уровнем хранилища RDD.

MEMORY_AND_DISK

Храните RDD как десериализованные объекты Java в JVM. Если RDD не помещается в память, сохраните разделы, которые не помещаются на диске, и считывайте их оттуда, когда они понадобятся.

Комментарии:

1. Это относится к данным между задачами или заданиями. Мой вопрос касается первой загрузки данных из такого источника, как s3.