Spark verliert println () auf stdout

8

Ich habe den folgenden Code:

%Vor%

Dann ist der blueCount nicht Null, aber ich habe keinen println () Ausgang! Fehle ich hier etwas? Danke!

    
Edamame 20.10.2015, 00:14
quelle

2 Antworten

3

Ich konnte es umgehen, indem ich eine UtilityFunction machte:

%Vor%     
Edamame 28.10.2015, 03:03
quelle
14

Dies ist eine konzeptionelle Frage ...

Stellen Sie sich vor Sie haben einen großen Cluster, der aus vielen Arbeitern besteht, sagen wir n worker, und diese Arbeiter speichern eine Partition von RDD oder DataFrame . Stellen Sie sich vor, Sie starten eine map Aufgabe über diese Daten hinweg dass map Sie haben eine print Anweisung, zuerst einmal:

  • Wo werden diese Daten ausgedruckt?
  • Welcher Knoten hat Priorität und welche Partition?
  • Wenn alle Knoten parallel laufen, wer wird zuerst gedruckt?
  • Wie wird diese Druckwarteschlange erstellt?

Das sind zu viele Fragen, daher haben sich die Designer / Betreuer von apache-spark entschieden, jede Unterstützung für print -Anweisungen innerhalb einer map-reduce -Operation fallenzulassen (dies beinhaltet accumulators und sogar broadcast Variablen).

Dies ist auch sinnvoll, weil Spark für sehr große Datensätze eine Sprache ist, die entworfen ist. Während das Drucken zum Testen und Debuggen nützlich sein kann, möchten Sie nicht jede Zeile eines DataFrames oder RDDs drucken, da sie so konstruiert sind, dass sie Millionen oder Milliarden von Zeilen haben! Warum also mit diesen komplizierten Fragen umgehen, wenn Sie gar nicht erst drucken wollen?

Um dies zu beweisen, können Sie diesen Scala-Code zum Beispiel ausführen:

%Vor%     
Alberto Bonsanto 20.10.2015 00:28
quelle