it-swarm.com.de

Gibt es eine bessere Möglichkeit, den gesamten Spark SQL-Datenrahmen anzuzeigen?

Ich möchte den gesamten Apache Spark SQL-Datenrahmen mit der Scala-API anzeigen. Ich kann die show()-Methode verwenden:

myDataFrame.show(Int.MaxValue)

Gibt es eine bessere Möglichkeit, einen gesamten DataFrame anzuzeigen, als Int.MaxValue?

29
Yuri Brovman

Es ist im Allgemeinen nicht ratsam, einen ganzen DataFrame für stdout anzuzeigen, da dies bedeutet, dass Sie den gesamten DataFrame (alle seine Werte) zum Treiber ziehen müssen (es sei denn, DataFrame ist bereits lokal, was Sie mit df.isLocal überprüfen können).

Wenn Sie nicht im Voraus wissen, dass die Größe Ihres Datasets ausreichend klein ist, sodass für den Treiber-JVM-Prozess ausreichend Speicher für alle Werte zur Verfügung steht, ist dies nicht sicher. Aus diesem Grund zeigt DataFrame-API show() standardmäßig nur die ersten 20 Zeilen an.

Sie können den df.collect verwenden, der Array[T] zurückgibt, und dann jede Zeile durchlaufen und ausdrucken:

df.collect.foreach(println)

sie verlieren jedoch alle in df.showString(numRows: Int) implementierten Formatierungen (die show() intern verwendet).

Nein, ich denke, es gibt keinen besseren Weg.

51
Grega Kešpret

Eine Möglichkeit ist die Verwendung der Funktion count(), um die Gesamtzahl der Datensätze abzurufen und show(rdd.count()) zu verwenden.

3
AkshayK

Wie von anderen vorgeschlagen, ist der Ausdruck des gesamten DF keine gute Idee. Sie können jedoch df.rdd.foreachPartition(f) verwenden, um Partition für Partition auszudrucken, ohne die Treiber-JVM zu überfluten (y using collect)

2
ayan guha

Nichts ist knapper als das, aber wenn Sie den Int.MaxValue vermeiden möchten, können Sie eine collect verwenden und diese oder foreach verarbeiten. Für ein Tabellenformat ohne viel manuelles Code ist show das Beste, was Sie tun können.

1
Justin Pihony

In Java habe ich es auf zwei Arten ausprobiert ... Das funktioniert perfekt für mich: 

1.  

data.show(SomeNo);

2.  

data.foreach(new ForeachFunction<Row>() {
                public void call(Row arg0) throws Exception {
                    System.out.println(arg0);
                }
            });
0
Rajeev Rathor

Versuche es mit,

df.show (35, falsch)

Es werden 35 Zeilen- und 35 Spaltenwerte mit dem vollständigen Wertnamen angezeigt.

0
Suresh G