Насколько я понимаю, «local: // path / to / file» означает, что путь к файлу должен находиться в локальной файловой системе каждого рабочего узла, в отличие, например, от hdfs (hdfs: /// путь / к / файлу).
Таким образом, в первом случае файл должен находиться в отдельной файловой системе каждого узла, во втором случае достаточно, чтобы он находился где-то в формате hdf и был загружен на узлы при запуске контекста искры.
Поведение объясняется в документации Spark :
Spark использует следующую схему URL, чтобы использовать разные стратегии распространения jar-файлов:
- file: - Абсолютные пути и файл: / URI обслуживаются файловым сервером HTTP драйвера, и каждый исполнитель извлекает файл с HTTP-сервера драйвера.
- hdfs :, http :, https :, ftp: - эти файлы и файлы JAR из URI, как и ожидалось,
- local: - ожидается, что URI, начинающийся с local: /, будет существовать как локальный файл на каждом рабочем узле. Это означает, что никакого сетевого ввода-вывода не будет, и он хорошо работает для больших файлов / JAR-файлов, которые передаются каждому работнику или совместно используются через NFS, GlusterFS и т. Д.
Для больших файлов лучше использовать локальный режим или иметь их в формате hdf, но иметь коэффициент репликации = количество узлов, поэтому местоположение файла hdfs-replication-местоположение действительно всегда совпадает с узлом, на котором работает ваш контейнер .