Spark не должен считывать весь файл в память сразу. Этот файл размером 40 ГБ разделен на множество разделов размером 128 МБ (или любого размера раздела). Каждый из этих разделов является задачей обработки. Каждое ядро будет одновременно работать только с одной задачей, причем предпочтение отдается работе с задачами, в которых раздел данных хранится на одном и том же узле. Только тот раздел 128 МБ, с которым ведется работа, должен быть прочитан, остальная часть файла не читается. Как только задача завершается (и производит некоторый вывод), тогда считываются 128 МБ для следующей задачи, и данные, считанные для первой задачи, могут быть освобождены из памяти. Из-за этого в память необходимо загружать только небольшой объем данных за один раз, а не весь файл сразу.
Также, строго говоря, spark.read.textFile("test.txt")
ничего не делает. Он не читает данных и не обрабатывает. Он создает СДР, но СДР не содержит никаких данных. А СДР - это просто план выполнения. spark.read.textFile("test.txt")
объявил, что файл test.txt будет считан используемым в качестве источника данных, если и когда RDD оценивается, но ничего не делает самостоятельно.