Ich versuche, den Inhalt einer Sammlung auf der Spark-Konsole zu drucken.
Ich habe einen Typ:
linesWithSessionId: org.apache.spark.rdd.RDD[String] = FilteredRDD[3]
Und ich benutze den Befehl:
scala> linesWithSessionId.map(line => println(line))
Aber das ist gedruckt:
res1: org.apache.spark.rdd.RDD [Unit] = MappedRDD [4] auf der Karte um: 19
Wie kann ich das RDD auf die Konsole schreiben oder auf der Festplatte speichern, um den Inhalt anzuzeigen?
scala
apache-spark
blauer Himmel
quelle
quelle
show
Methode verwenden.Antworten:
Wenn Sie den Inhalt einer RDD anzeigen möchten, können Sie Folgendes verwenden
collect()
:Das ist jedoch keine gute Idee, wenn die RDD Milliarden von Leitungen hat. Verwenden Sie
take()
zum Ausdrucken nur wenige:quelle
saveAsTextFile
auf RDD verwende, ist, dass ich den RDD-Inhalt in mehr als eine Datei schreiben muss. Deshalb verwende ichforeach
Die
map
Funktion ist eine Transformation . Dies bedeutet, dass Spark Ihre RDD erst dann auswertet, wenn Sie eine Aktion darauf ausführen .Zum Drucken können Sie Folgendes verwenden
foreach
(was eine Aktion ist):Um es auf die Festplatte zu schreiben, können Sie eine der
saveAs...
Funktionen (Standbildaktionen) der RDD-API verwendenquelle
collect
damit das RDD in der Konsole gedruckt werden kann.foreach
selbst wird zuerst die RDD "materialisieren" und dannprintln
auf jedem Element ausgeführt, wird alsocollect
hier nicht wirklich benötigt (obwohl Sie es natürlich verwenden können) ...foreach
funktioniert dies einwandfrei. Wenn Sie einen Job in einem Cluster ausführen und Ihre Festplatte drucken möchten, sollten Siecollect
(wie in anderen Kommentaren und Antworten angegeben) vor derprintln
Ausführung an den Treiber gesendet werden . Undtake
wenn Sie Ihre RDD zu groß verwenden, ist es möglicherweise eine gute Idee, sie wie von Oussama vorgeschlagen zu verwenden.Wenn Sie dies in einem Cluster ausführen,
println
wird nicht in Ihren Kontext zurückgedruckt. Sie müssen dieRDD
Daten zu Ihrer Sitzung bringen. Dazu können Sie es in ein lokales Array zwingen und dann ausdrucken:quelle
Sie können Ihre
RDD
in eineDataFrame
dannshow()
es konvertieren .Dies zeigt die obersten 20 Zeilen Ihrer Daten an, sodass die Größe Ihrer Daten kein Problem darstellen sollte.
quelle
import spark.implicits._
toDF
nochspark.implicits._
im Funkenbereich erkennen.Es gibt wahrscheinlich viele architektonische Unterschiede zwischen
myRDD.foreach(println)
undmyRDD.collect().foreach(println)
(nicht nur "sammeln", sondern auch andere Aktionen). Einer der Unterschiede, die ich gesehen habe, istmyRDD.foreach(println)
, dass die Ausgabe in zufälliger Reihenfolge erfolgt. Zum Beispiel: Wenn meine Festplatte aus einer Textdatei stammt, in der jede Zeile eine Nummer hat, hat die Ausgabe eine andere Reihenfolge. Aber wenn ich das getan habemyRDD.collect().foreach(println)
, bleibt die Reihenfolge genauso wie die Textdatei.quelle
In Python
Dadurch wird der gesamte Inhalt der RDD ausgedruckt
quelle
und Spark neuere Version wird Tabelle schön zeigen.
quelle
Anstatt jedes Mal zu tippen, können Sie;
[1] Erstellen Sie eine generische Druckmethode in Spark Shell.
[2] Oder noch besser: Mit impliziten Elementen können Sie die Funktion der RDD-Klasse hinzufügen, um deren Inhalt zu drucken.
Anwendungsbeispiel:
Ausgabe:
Wichtig
Dies ist nur sinnvoll, wenn Sie im lokalen Modus und mit einer kleinen Datenmenge arbeiten. Andernfalls können Sie die Ergebnisse entweder nicht auf dem Client sehen oder haben aufgrund des großen Dataset-Ergebnisses nicht genügend Arbeitsspeicher.
quelle
Sie können auch als Datei speichern:
rdd.saveAsTextFile("alicia.txt")
quelle
In der Java-Syntax:
quelle