Ich folge dem großartigen Funken-Tutorial
Also versuche ich um 46:00 Uhr, das zu laden, README.md
aber ich scheitere an dem, was ich tue, folgendes:
$ sudo docker run -i -t -h sandbox sequenceiq/spark:1.1.0 /etc/bootstrap.sh -bash
bash-4.1# cd /usr/local/spark-1.1.0-bin-hadoop2.4
bash-4.1# ls README.md
README.md
bash-4.1# ./bin/spark-shell
scala> val f = sc.textFile("README.md")
14/12/04 12:11:14 INFO storage.MemoryStore: ensureFreeSpace(164073) called with curMem=0, maxMem=278302556
14/12/04 12:11:14 INFO storage.MemoryStore: Block broadcast_0 stored as values in memory (estimated size 160.2 KB, free 265.3 MB)
f: org.apache.spark.rdd.RDD[String] = README.md MappedRDD[1] at textFile at <console>:12
scala> val wc = f.flatMap(l => l.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://sandbox:9000/user/root/README.md
at org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:285)
Wie kann ich das laden README.md
?
scala
apache-spark
Jas
quelle
quelle
Gonbes Antwort ist ausgezeichnet. Trotzdem möchte ich das erwähnen
file:///
=~/../../
, nicht$SPARK_HOME
. Hoffe das könnte etwas Zeit für Neulinge wie mich sparen.quelle
file:///
ist der Stammordner des Dateisystems, wie er von der ausführenden JVM gesehen wird, nicht zwei Ebenen über dem Basisordner. Das in RFC 8089 angegebene URI-Format lautetfile://hostname/absolute/path
. Im lokalen Fall ist diehostname
(Berechtigungs-) Komponente leer.Während Spark das Laden von Dateien aus dem lokalen Dateisystem unterstützt, müssen die Dateien auf allen Knoten in Ihrem Cluster unter demselben Pfad verfügbar sein.
Einige Netzwerkdateisysteme, wie NFS, AFS und die NFS-Schicht von MapR, werden dem Benutzer als reguläres Dateisystem zur Verfügung gestellt.
Wenn sich Ihre Daten bereits in einem dieser Systeme befinden, können Sie sie als Eingabe verwenden, indem Sie einfach eine Datei angeben: // path; Spark wird damit umgehen, solange das Dateisystem auf jedem Knoten unter demselben Pfad bereitgestellt wird. Jeder Knoten muss denselben Pfad haben
Wenn Ihre Datei nicht bereits auf allen Knoten im Cluster vorhanden ist, können Sie sie lokal auf den Treiber laden, ohne Spark zu durchlaufen, und dann parallelize aufrufen, um den Inhalt an die Worker zu verteilen
Achten Sie darauf, dass Sie file: // voranstellen und je nach Betriebssystem "/" oder "\" verwenden.
quelle
Sie müssen nur den Pfad der Datei als "Datei: /// Verzeichnis / Datei" angeben.
Beispiel:
quelle
Beachtung:
Stellen Sie sicher, dass Sie spark im lokalen Modus ausführen, wenn Sie Daten von local (
sc.textFile("file:///path to the file/")
) laden. Andernfalls wird eine solche Fehlermeldung angezeigtCaused by: java.io.FileNotFoundException: File file:/data/sparkjob/config2.properties does not exist
. Da Executoren, die auf verschiedenen Workern ausgeführt werden, diese Datei nicht im lokalen Pfad finden.quelle
Befindet sich die Datei in Ihrem Spark-Masterknoten (z. B. bei Verwendung von AWS EMR), starten Sie die Spark-Shell zuerst im lokalen Modus.
Alternativ können Sie die Datei zuerst aus dem lokalen Dateisystem in HDFS kopieren und dann Spark im Standardmodus (z. B. YARN bei Verwendung von AWS EMR) starten, um die Datei direkt zu lesen.
quelle
Ich habe eine Datei namens NewsArticle.txt auf meinem Desktop.
In Spark habe ich Folgendes eingegeben:
Ich musste alle \ to / Zeichen für den Dateipfad ändern.
Um zu testen, ob es funktioniert hat, habe ich Folgendes eingegeben:
Ich verwende Windows 7 und habe Hadoop nicht installiert.
quelle
Dies wurde in der Spark-Mailingliste besprochen. Bitte beziehen Sie sich auf diese Mail .
Sie sollten
hadoop fs -put <localsrc> ... <dst>
die Datei kopieren inhdfs
:quelle
Dies ist mir mit Spark 2.3 passiert, wobei Hadoop auch im gemeinsamen Benutzerverzeichnis "hadoop" installiert ist. Da sowohl Spark als auch Hadoop im selben gemeinsamen Verzeichnis installiert wurden, betrachtet Spark das Schema standardmäßig als
hdfs
und beginnt mit der Suche nach den Eingabedateien unter hdfs wie vonfs.defaultFS
in Hadoop's angegebencore-site.xml
. In solchen Fällen müssen wir das Schema explizit als angebenfile:///<absoloute path to file>
.quelle
Dies ist die Lösung für diesen Fehler, den ich auf einem Spark-Cluster erhalten habe, der in Azure auf einem Windows-Cluster gehostet wird:
Laden Sie die unformatierte Datei HVAC.csv und analysieren Sie sie mit der Funktion
Wir verwenden (wasb: ///), um Hadoop den Zugriff auf die Azure-Blog-Speicherdatei zu ermöglichen, und die drei Schrägstriche sind eine relative Referenz zum laufenden Knotencontainerordner.
Beispiel: Wenn der Pfad für Ihre Datei im Datei-Explorer im Spark-Cluster-Dashboard wie folgt lautet:
sflcc1 \ sflccspark1 \ HdiSamples \ SensorSampleData \ hvac
Der Pfad wird also wie folgt beschrieben: sflcc1: ist der Name des Speicherkontos. sflccspark: ist der Name des Clusterknotens.
Wir beziehen uns also auf den aktuellen Namen des Clusterknotens mit den relativen drei Schrägstrichen.
Hoffe das hilft.
quelle
Wenn Sie versuchen, die Datei aus HDFS zu lesen. Versuchen Sie, den Pfad in SparkConf festzulegen
quelle
Sie müssen sc.textFile (...) nicht verwenden, um lokale Dateien in Datenrahmen zu konvertieren. Eine der Möglichkeiten besteht darin, eine lokale Datei Zeile für Zeile zu lesen und sie dann in einen Spark-Datensatz umzuwandeln. Hier ist ein Beispiel für einen Windows-Computer in Java:
Jetzt können Sie den Datenrahmen
data
in Ihrem Code verwenden.quelle
Ich habe Folgendes versucht und es hat von meinem lokalen Dateisystem aus funktioniert. Grundsätzlich kann Spark vom lokalen, HDFS- und AWS S3-Pfad lesen
quelle
Versuchen
quelle
scala> val f = sc.textFile("./README.md") 14/12/04 12:54:33 INFO storage.MemoryStore: ensureFreeSpace(81443) called with curMem=164073, maxMem=278302556 14/12/04 12:54:33 INFO storage.MemoryStore: Block broadcast_1 stored as values in memory (estimated size 79.5 KB, free 265.2 MB) f: org.apache.spark.rdd.RDD[String] = ./README.md MappedRDD[5] at textFile at <console>:12 scala> val wc = f.flatMap(l => l.split(" ")).map(word => (word, 1)).reduceByKey(_ + _) org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://sandbox:9000/user/root/README.md at
pwd
auf der Bash Shell machenbash-4.1#