apache-spark
Hoe vraag ik Apache Spark aan?
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: python-2.x , python-3.x 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 vanDataset.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
- Search Stack Overflow voor dubbele vragen. Er zijn veel voorkomende problemen die al uitgebreid zijn gedocumenteerd.
- Lees Hoe stel ik een goede vraag? .
- Lees Over welke onderwerpen kan ik hier vragen?
- Hulpbronnen voor Apache Spark Community