Есть ли способ изменить действительный и существующий объект 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, надеюсь, не в уравнении, есть ли способ для меня надежно преобразовать путь в файл?
**
Я не знаю.
Насколько я понимаю, Путь
в Hadoop представляет собой идентификатор узла в их распределенной файловой системе. Это абстракция, отличная от java.io.File
, который представляет узел в локальной файловой системе. Маловероятно, что Path
может даже иметь представление File
, которое ведет себя эквивалентно, потому что лежащие в основе модели фундаментально отличаются.
Отсюда отсутствие перевода. Я исхожу из вашего утверждения, что объекты File
являются «[подробнее] полезными», вы хотите, чтобы объект этого класса использовал существующие методы библиотеки? По указанным выше причинам это не сработает. Если это ваша собственная библиотека, вы можете переписать ее для чистой работы с путями Hadoop, а затем преобразовать любые файлы в объекты пути (это направление работает, поскольку пути представляют собой строгий надмножество файлов). Если это сторонняя библиотека, то вам не повезло; авторы этого метода не приняли во внимание эффекты распределенной файловой системы и написали этот метод только для работы с простыми старыми локальными файлами.