SparkContext.addFile загрузить файл на узел драйвера, но не рабочие - PullRequest
0 голосов
/ 24 мая 2018

Я попытался запустить sc.texfile("file:///.../myLocalFile.txt") на кластере, и я получил java.io.FileNotFoundException на рабочих.

Так что я погуглил и нашел sc.addFile / SparkFiles.get для загрузки файла каждому работнику.

Так вот мой код:

sc.addFile("file:///.../myLocalFile.txt")
val input = sc.textFile(SparkFiles.get("myLocalFile.txt"))

Я вижу, что узел драйвера загружает файл в каталог в /tmp, а затем мои работники получают FileNotFoundException, потому что:

  1. Я не вижу распечатки, в которой говорится, что работники загрузили файл в том виде, в котором они должны иметь
  2. Они пытаются получить доступ к файлу с помощью пути драйверов.Поэтому я предполагаю, что SparkFiles.get() запускается на узле драйвера, а не на рабочем (что я подтвердил, добавив println).

Я попытался с опцией spark-submit --files, и я вижу точно так жепроблема.

Так что я делаю не так?Все, что я хочу, это sc.textFile() в кластере.

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

sc.addFile не для этого.Если вы хотите читать файлы через sc, вам нужно поместить ваш файл в hdfs вместо использования sc.addFile

0 голосов
/ 24 мая 2018

Вам необходимо скопировать файлы на рабочих по тому же пути, что и на драйвере, или использовать hdfs, как это будет доступно на рабочих.У рабочих нет этих файлов, вы можете зайти в папку и посмотреть на себя, я бы их прочитал

...