Как преобразовать объект Path Hadoop в объект Java-файла

Есть ли способ изменить действительный и существующий объект Hadoop Path в полезный объект Java File. Есть хороший способ сделать это, или мне нужно, чтобы дубинкой кодировать в представлении? Более очевидные подходы не работают, и кажется, что это будет обычная часть кода

void func(Path p) {
  if (p.isAbsolute()) {
     File f = new File(p.toURI());
  }
}

Это не работает, потому что Path :: toURI () возвращает идентификатор "hdfs" и конструктор Java File (URI uri) распознает только идентификатор «файла».

Есть ли способ заставить Path и File работать вместе?

**

Хорошо, как насчет конкретного ограниченного примера.

Path[] paths = DistributedCache.getLocalCacheFiles(job);

Предполагается, что DistributedCache предоставляет локализованную копию файла, но возвращает путь. Я предполагаю, что DistributedCache создает локальную копию файла, где они находятся на одном диске. Учитывая этот ограниченный пример, где hdfs, надеюсь, не в уравнении, есть ли способ для меня надежно преобразовать путь в файл?

**

9
задан akintayo 9 August 2010 в 22:14
поделиться

1 ответ

Я не знаю.

Насколько я понимаю, Путь в Hadoop представляет собой идентификатор узла в их распределенной файловой системе. Это абстракция, отличная от java.io.File , который представляет узел в локальной файловой системе. Маловероятно, что Path может даже иметь представление File , которое ведет себя эквивалентно, потому что лежащие в основе модели фундаментально отличаются.

Отсюда отсутствие перевода. Я исхожу из вашего утверждения, что объекты File являются «[подробнее] полезными», вы хотите, чтобы объект этого класса использовал существующие методы библиотеки? По указанным выше причинам это не сработает. Если это ваша собственная библиотека, вы можете переписать ее для чистой работы с путями Hadoop, а затем преобразовать любые файлы в объекты пути (это направление работает, поскольку пути представляют собой строгий надмножество файлов). Если это сторонняя библиотека, то вам не повезло; авторы этого метода не приняли во внимание эффекты распределенной файловой системы и написали этот метод только для работы с простыми старыми локальными файлами.

1
ответ дан 4 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: