Pyspark: Liste der Dateien / Verzeichnisse im HDFS-Pfad abrufen

8

Wie im Titel. Ich kenne textFile, aber wie der Name schon sagt, funktioniert es nur für Textdateien. Ich müsste auf die Dateien / Verzeichnisse in einem Pfad auf HDFS (oder lokalen Pfad) zugreifen. Ich benutze pyspark

Danke für die Hilfe

    
Federico Ponzi 02.03.2016, 14:53
quelle

5 Antworten

10

Ich glaube, es ist hilfreich, Spark nur als Datenverarbeitungswerkzeug zu betrachten, mit einer Domäne, die mit dem Laden der Daten beginnt. Es kann viele Formate lesen und es unterstützt Hadoop-Glob-Ausdrücke, die für das Lesen aus mehreren Pfaden in HDFS sehr nützlich sind, aber es hat keine eingebaute Einrichtung, die mir zum Durchlaufen von Verzeichnissen oder Dateien bekannt ist, und hat es auch nicht Dienstprogramme speziell für die Interaktion mit Hadoop oder HDFS.

Es gibt ein paar verfügbare Tools, um das zu tun, was Sie wollen, einschließlich esutil und hdfs . Die hdfs lib unterstützt sowohl CLI als auch API. Sie können direkt zu "Wie lade ich HDFS-Dateien in Python auflisten" rechts hier . Es sieht so aus:

%Vor%     
Tristan Reid 02.03.2016, 15:23
quelle
15

Die Verwendung von JVM-Gateway ist vielleicht nicht so elegant, aber in einigen Fällen könnte der folgende Code hilfreich sein:

%Vor%     
volhv 26.10.2016 09:39
quelle
7

Wenn Sie PySpark verwenden, können Sie Befehle interaktiv ausführen :

Listet alle Dateien aus einem ausgewählten Verzeichnis auf:

hdfs dfs -ls <path> z. B. hdfs dfs -ls /user/path :

%Vor%

Oder suchen Sie Dateien in einem ausgewählten Verzeichnis:

hdfs dfs -find <path> -name <expression> z. B. hdfs dfs -find /user/path -name *.txt :

%Vor%     
Darius Morawiec 10.05.2017 07:09
quelle
1

Wenn Sie alle -Dateien in einem Verzeichnis einlesen möchten, überprüfen Sie sc.wholeTextFiles [doc] , aber beachte, dass der Inhalt der Datei in den Wert einer einzelnen Zeile geschrieben wird, was wahrscheinlich nicht das gewünschte Ergebnis ist.

>

Wenn Sie nur einige Dateien lesen wollen, dann erstellen Sie eine Liste von Pfaden (mit einem normalen hdfs ls-Befehl plus der von Ihnen benötigten Filterung) und übergeben diese in sqlContext.read.text [doc] und dann die Konvertierung von DataFrame zu RDD scheint am besten zu sein nähern.

    
Matthew Graves 02.03.2016 15:10
quelle
0

Es gibt eine einfache Möglichkeit, dies mit der Snakebite-Bibliothek zu tun

%Vor%     
Hgottipati 17.08.2017 02:51
quelle

Tags und Links