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
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%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
:
Oder suchen Sie Dateien in einem ausgewählten Verzeichnis:
hdfs dfs -find <path> -name <expression>
z. B. hdfs dfs -find /user/path -name *.txt
:
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.
Es gibt eine einfache Möglichkeit, dies mit der Snakebite-Bibliothek zu tun
%Vor%Tags und Links hadoop apache-spark pyspark