Zoeken…


Invoering

Het doel van dit onderwerp is het documenteren van best practices bij het stellen van Apache Spark-gerelateerde vragen.

Omgeving details:

Geef de volgende informatie als u Apache Spark-vragen stelt

  • Apache Spark-versie gebruikt door de client en Spark-implementatie indien van toepassing. Voor API-gerelateerde vragen is meestal major (1.6, 2.0, 2.1 enz.) Voldoende, voor vragen over mogelijke bugs gebruikt u altijd de volledige versie-informatie.
  • Scala-versie gebruikt om Spark-binaries te bouwen.
  • JDK-versie ( java -version ).
  • Als u gasttaal (Python, R) gebruikt, geef dan informatie over de taalversie. Gebruik in Python tags: , of meer specifieke tags om taalvarianten te onderscheiden.
  • build.sbt ( build.sbt , pom.xml ) indien van toepassing of externe afhankelijkheidsversies (Python, R) indien van toepassing.
  • Clusterbeheer ( local[n] , Spark standalone, Yarn, Mesos), modus ( client , cluster ) en andere verzendopties indien van toepassing.

Voorbeeldgegevens en code

Voorbeeld gegevens

Probeer een minimaal voorbeeld van invoergegevens te verstrekken in een indeling die direct door de antwoorden kan worden gebruikt zonder vervelende en tijdrovende analyse van bijvoorbeeld een invoerbestand of lokale verzameling met alle code die nodig is om gedistribueerde gegevensstructuren te maken.

Voeg indien van toepassing altijd type-informatie toe:

  • Gebruik in RDD-gebaseerde API indien nodig typeaantekeningen.
  • In DataFrame gebaseerde API bieden schema-informatie als een StrucType of uitvoer van Dataset.printSchema .

Uitvoer van Dataset.show of print kan er goed uitzien, maar zegt niets over onderliggende typen.

Als een bepaald probleem alleen op schaal optreedt, gebruikt u willekeurige gegevensgenerators (Spark biedt enkele nuttige hulpprogramma's in org.apache.spark.mllib.random.RandomRDDs en org.apache.spark.graphx.util.GraphGenerators

Code

Gebruik indien mogelijk typeaantekeningen. Hoewel uw compiler gemakkelijk de typen kan bijhouden, is het niet zo eenvoudig voor stervelingen. Bijvoorbeeld:

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

of

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

zijn beter dan:

val lines = rdd.map(someFunction)

en

def f(x: String) = ???

respectievelijk.

Diagnostische informatie

Vragen debuggen.

Wanneer de vraag gerelateerd is aan het opsporen van fouten, geef dan altijd relevante traceback. Hoewel het raadzaam is om dubbele uitgangen (van verschillende uitvoerders of pogingen) te verwijderen, snijd dan geen tracebacks naar slechts één regel of uitzonderingsklasse.

Prestatievragen.

Probeer afhankelijk van de context details te geven zoals:

  • RDD.debugString / Dataset.explain .
  • Uitvoer van Spark UI met DAG-diagram indien van toepassing in bijzonder geval.
  • Relevante logboekberichten.
  • Diagnostische informatie verzameld door externe tools (Ganglia, VisualVM).

Voordat je het vraagt



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow