Spark: как использовать SparkContext.textFile для локальной файловой системы

Я только начинаю использовать Apache Spark (в Scala, но язык не имеет значения). Я использую автономный режим, и я хочу обработать текстовый файл из локальной файловой системы (поэтому ничего не распространяется, как HDFS).

Согласно документации метода textFile из SparkContext, он будет

Прочитайте текстовый файл из HDFS, локальной файловой системы (доступной на всех узлы) или любой поддерживаемый Hadoop файловой системой URI, и вернуть его как RDD строк.

Для меня непонятно, может ли весь текстовый файл быть скопирован во все узлы или если входные данные уже должны быть разделены, например, если использовать 4 узла и файл csv с 1000 строк, по 250 строк на каждом node.

Я подозреваю, что каждый node должен иметь весь файл, но я не уверен.

Ответ 1

Каждый node должен содержать целый файл. В этом случае локальная файловая система будет логически неотличима от HDFS по отношению к этому файлу.

Ответ 2

добавить file:// в локальный путь к файлу

Ответ 3

Правильный способ использования - три слэша. Два для синтаксиса (например, http://) и один для точки монтирования файловой системы Linux, например sc.textFile(файл:///home/worker/data/my_file.txt). Если вы используете локальный режим, достаточно только файла. В случае автономного кластера файл должен быть скопирован на каждом node. Обратите внимание, что содержимое файла должно быть точно таким же, иначе искра возвращает смешные результаты.

Ответ 4

Из справочной страницы Spark - Если вы не используете Hadoop/HDFS, "если вы запускаете на кластере, вам понадобится какая-то форма общей файловой системы (например, NFS, установленная по одному пути на каждом node). Если у вас есть этот тип файловой системы, вы можете просто развернуть Spark в автономном режиме."

https://spark.apache.org/faq.html

Ответ 5

искровым 1.6.1

Java-1.7.0_99

Узлы в кластере-3 (HDP).

Case 1:

Running in local mode local[n]

file:///.. и file:/.. читает файл из локальной системы

Case 2:

`--master yarn-cluster`

Input path does not exist: for file:/ and file://

И для file://

java.lang.IllegalArgumentException :Wrong FS: file://.. expected: file:///

Ответ 6

Добавьте "файл:///" uri вместо "file://". Это решило проблему для меня.