Gibt es eine Möglichkeit, ein gültiges und vorhandenes Hadoop-Pfadobjekt in ein nützliches Java-Dateiobjekt zu ändern. Gibt es eine gute Möglichkeit, dies zu tun oder muss ich knüppeln, um Code in die Einreichung zu schreiben? Die offensichtlicheren Ansätze funktionieren nicht, und es scheint, als wäre es ein gewöhnlicher Code.
%Vor%Dies funktioniert nicht, da Path :: toURI () den "hdfs" Bezeichner zurückgibt und Java's Datei (URI uri) -Konstruktor nur den "file" Bezeichner erkennt.
Gibt es eine Möglichkeit, Pfad und Datei zusammenzuarbeiten?
**
Ok, wie wäre es mit einem bestimmten begrenzten Beispiel.
%Vor%DistributedCache soll eine lokalisierte Kopie einer Datei bereitstellen, aber es gibt einen Pfad zurück. Ich nehme an, dass DistributedCache eine lokale Kopie der Datei erstellt, wo sie sich auf demselben Datenträger befinden. In Anbetracht dieses begrenzten Beispiels, wo hoffentlich hoffentlich nicht in der Gleichung steht, gibt es eine Möglichkeit für mich, einen Pfad zuverlässig in eine Datei umzuwandeln?
**
Nicht, dass ich mir dessen bewusst bin.
Nach meinem Verständnis stellt eine Path
in Hadoop eine Kennung für einen Knoten in ihrem verteilten Dateisystem dar. Dies ist eine andere Abstraktion von java.io.File
, die einen Knoten im lokalen Dateisystem darstellt. Es ist unwahrscheinlich, dass eine Path
könnte sogar eine File
Repräsentation haben, die sich äquivalent verhält, weil die zugrundeliegenden Modelle sich grundlegend unterscheiden.
Daher der Mangel an Übersetzung. Ich vermute durch Ihre Behauptung, dass File
Objekte sind "[mehr] nützlich", wollen Sie ein Objekt dieser Klasse, um vorhandene Bibliotheksmethoden zu verwenden? Aus den oben genannten Gründen wird dies nicht sehr gut funktionieren. Wenn es sich um eine eigene Bibliothek handelt, könnten Sie sie so umschreiben, dass sie sauber mit Hadoop-Pfaden arbeitet und dann alle Dateien in Pfadobjekte konvertiert (diese Richtung funktioniert, da Pfade eine strenge Obermenge von Dateien sind). Wenn es eine Bibliothek von Dritten ist, dann haben Sie kein Glück; Die Autoren dieser Methode haben die Auswirkungen eines verteilten Dateisystems nicht berücksichtigt und nur diese Methode geschrieben, um mit einfachen alten lokalen Dateien zu arbeiten.
Ich hatte kürzlich die gleiche Frage, und es gibt wirklich eine Möglichkeit, eine Datei aus einem Pfad zu bekommen, aber es erfordert das Herunterladen der Datei vorübergehend. Offensichtlich ist dies für viele Aufgaben nicht geeignet, aber wenn Zeit und Speicherplatz für Sie nicht wichtig sind und Sie nur etwas benötigen, um mit Dateien aus Hadoop zu arbeiten, gehen Sie folgendermaßen vor:
%Vor%Wenn Sie ein LocalFileSystem erhalten
%Vor%Sie können Ihr Hadoop-Pfadobjekt an localFileSystem.pathToFile
übergeben %Vor%