Suche…


Einführung

Das Ziel dieses Themas besteht darin, bewährte Vorgehensweisen bei Fragen zu Apache Spark zu dokumentieren.

Umgebungsdetails:

Wenn Sie Fragen zu Apache Spark stellen, geben Sie bitte die folgenden Informationen an

  • Vom Client verwendete Apache Spark-Version und ggf. Spark-Bereitstellung. Für API-relevante Fragen ist normalerweise "major" (1.6, 2.0, 2.1 usw.) ausreichend. Für Fragen zu möglichen Fehlern verwenden Sie immer die vollständige Versionsinformation.
  • Scala-Version zum Erstellen von Spark-Binärdateien.
  • JDK-Version ( java -version ).
  • Wenn Sie eine Gastsprache (Python, R) verwenden, geben Sie bitte Informationen zur Sprachversion an. Verwenden Sie in Python die Tags: , oder spezifischere, um zwischen Sprachvarianten zu unterscheiden.
  • Build-Definition ( build.sbt , pom.xml ), falls zutreffend, oder externe Abhängigkeitsversionen (Python, R), falls zutreffend.
  • Cluster-Manager ( local[n] , Spark-Standalone, Yarn, Mesos), Modus ( client , cluster ) und ggf. andere Übergabeoptionen.

Beispieldaten und Code

Beispieldaten

Bitte versuchen Sie, ein Minimum an Eingabedaten in einem Format anzugeben, das direkt von den Antworten verwendet werden kann, ohne langwieriges und zeitaufwändiges Analysieren von Eingabedateien oder lokalen Sammlungen mit dem gesamten Code, der zum Erstellen verteilter Datenstrukturen erforderlich ist.

Falls zutreffend, bitte Typinformationen angeben:

  • In der RDD-basierten API verwenden Sie bei Bedarf Typanmerkungen.
  • Geben Sie in der DataFrame-basierten API Schemainformationen als StrucType oder als Ausgabe von Dataset.printSchema .

Die Ausgabe von Dataset.show oder print kann gut aussehen, sagt jedoch nichts über die zugrunde liegenden Typen aus.

Wenn ein bestimmtes Problem nur bei der Skalierung auftritt, verwenden Sie Zufallsdatengeneratoren (Spark bietet einige nützliche Dienstprogramme in org.apache.spark.mllib.random.RandomRDDs und org.apache.spark.graphx.util.GraphGenerators

Code

Bitte verwenden Sie nach Möglichkeit Typanmerkungen. Während Ihr Compiler die Typen leicht nachverfolgen kann, ist dies für Sterbliche nicht so einfach. Zum Beispiel:

val lines: RDD[String] = rdd.map(someFunction)

oder

def f(x: String): Int = ???

sind besser als:

val lines = rdd.map(someFunction)

und

def f(x: String) = ???

beziehungsweise.

Diagnoseinformationen

Fragen debuggen.

Wenn sich die Frage auf das Debuggen einer bestimmten Ausnahme bezieht, stellen Sie immer ein relevantes Traceback bereit. Es ist zwar ratsam, doppelte Ausgaben (von verschiedenen Executoren oder Versuchen) zu entfernen, die Tracebacks sollten jedoch nicht auf eine einzelne Zeile oder Ausnahmeklasse beschränkt werden.

Fragen zur Leistung

Versuchen Sie je nach Kontext, Details anzugeben:

  • RDD.debugString / Dataset.explain .
  • Ausgabe von der Spark-Benutzeroberfläche mit DAG-Diagramm, falls zutreffend, falls zutreffend.
  • Relevante Protokollnachrichten
  • Diagnoseinformationen, die von externen Tools (Ganglia, VisualVM) erfasst wurden.

Bevor du fragst



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow