SciSpark: чтение из локальной папки вместо папки HDFS

#scala #apache-spark #hdfs

#scala #apache-spark #hdfs

Вопрос:

Я использую корпоративный кластер, который имеет как локальные, так и файловые системы HDFS. Файлы, которые мне нужно обработать, находятся в формате netcdf, и поэтому я использую SciSpark для загрузки. На рабочей станции, на которой нет HDFS, код считывается из локальной папки. Однако, когда присутствуют папки HDFS, он пытается читать только из HDFS. Поскольку размер файлов, присутствующих в папке, огромен (суммарно от сотен гигабайт до ТБАЙТ), мне приходится копировать их в HDFS, что неэффективно и неудобно. Код (Scala), который я использую для загрузки файлов, показан ниже:

 val ncFilesRDD = sc.netcdfDFSFiles(ncDirectoryPath, List("x1", "x2", "x3"))
val ncFileCRDArrayRDD = ncFilesRDD.map(x => (x.variables.get("x1").get.data.toArray,
                             x.variables.get("x2").get.data.toArray,
                             x.variables.get("x3").get.data.toArray
                             ))
  

Я был бы очень признателен за любую помощь в изменении кода, который позволит мне использовать локальный каталог вместо HDFS.

Ответ №1:

В документе с комментариями к исходному коду netcdfDFSFiles говорится that since the files are read from HDFS

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

Но есть еще одна функция netcdfFileList , которая говорит : The URI could be an OpenDapURL or a filesystem path.

Поскольку это может занять filesystem path некоторое время, вы можете использовать его как

 val ncFilesRDD = sc.netcdfFileList("file://your/path", List("x1", "x2", "x3"))
  

file:// Будет искать только локальный каталог.

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

1. Спасибо за ответ. Код работает, если HDFS недоступен, и я использовал его для сравнения в других системах. Попробую ваше предложение и сообщу вам о результате.

2. Вы пробовали использовать file:// в своем path для функции netcdfDFSFiles .

3. Только что сделал. val ncFilesRDD = sc.netcdfFileList("file:///bigdata/home/IPDATA", List("x1", "x2", "x3")) . Был создан некоторый RDD с правильным количеством файлов, но следующий шаг не удался. java.io.FileNotFoundException: CDF . Я пытаюсь понять, будет ли полезно предоставить список файлов с полным путем.

4. Наконец-то это сработало! Мне пришлось указать список файлов (т. Е. Файлы с полным путем) и поместить его в виде одного файла в каталог. Затем он выбрал список файлов и загрузил файлы. Аналогично должно работать и с несколькими списками файлов. Большое спасибо!

5. это потрясающе! 🙂