apache-spark
Hur ställer jag fråga om Apache Spark?
Sök…
Introduktion
Målet med detta ämne är att dokumentera bästa praxis när du ställer frågor om Apache Spark.
Miljöinformation:
Följ följande information när du ställer frågor om Apache Spark-relaterade frågor
- Apache Spark-version som används av klienten och Spark-distribution om tillämpligt. För API-relaterade frågor är majoritet (1.6, 2.0, 2.1 etc.) vanligtvis tillräckligt, för frågor om möjliga buggar använder du alltid fullversionsinformation.
- Scala-version som används för att bygga gnistbinarier.
- JDK-version (
java -version
). - Om du använder gästspråk (Python, R) ska du lämna information om språkversionen. I Python använder du taggar: python-2.x , python-3.x eller mer specifika för att skilja mellan språkvarianter.
- Bygg definition (
build.sbt
,pom.xml
) om tillämpligt eller externa beroendeversioner (Python, R) när det är tillämpligt. - Cluster manager (
local[n]
, gnist fristående, garn, mesos), läge (client
,cluster
) och andra skicka alternativ om tillämpligt.
Exempel på data och kod
Exempel Data
Försök att tillhandahålla ett minimalt exempel på inmatningsdata i ett format som direkt kan användas av svaren utan tråkiga och tidskrävande analysering till exempel inmatningsfil eller lokal insamling med all kod som krävs för att skapa distribuerade datastrukturer.
Om tillämpligt inkludera alltid typinformation:
- I RDD-baserade API använder du typanteckningar vid behov.
- I DataFrame-baserad API tillhandahålla schemainformation som en
StrucType
eller utgång frånDataset.printSchema
.
Output från Dataset.show
eller print
kan se bra ut men berättar ingenting om underliggande typer.
Om speciellt problem endast uppstår i skala, använd slumpmässiga datageneratorer (Spark ger några användbara verktyg i org.apache.spark.mllib.random.RandomRDDs
och org.apache.spark.graphx.util.GraphGenerators
Koda
Använd typanteckningar när det är möjligt. Medan din kompilator enkelt kan hålla reda på typerna är det inte så lätt för bara dödliga. Till exempel:
val lines: RDD[String] = rdd.map(someFunction)
eller
def f(x: String): Int = ???
är bättre än:
val lines = rdd.map(someFunction)
och
def f(x: String) = ???
respektive.
Diagnostisk information
Debugging frågor.
När frågan är relaterad till felsökning ska specifikt undantag alltid ge relevant traceback. Även om det är tillrådligt att ta bort duplicerade utgångar (från olika exekutörer eller försök) ska du inte klippa tracebacks till en enda rad eller undantagsklass.
Prestationsfrågor.
Beroende på sammanhanget försöker du ge detaljer som:
-
RDD.debugString
/Dataset.explain
. - Utgång från gnistgränssnitt med DAG-diagram om tillämpligt i särskilt fall.
- Relevanta loggmeddelanden.
- Diagnostisk information insamlad av externa verktyg (Ganglia, VisualVM).
Innan du frågar
- Sök Stack Overflow efter dubbla frågor. Det finns en gemensam klass av problem som redan har dokumenterats omfattande.
- Läs Hur ställer jag en bra fråga? .
- Läs Vilka ämnen kan jag fråga om här?
- Apache Spark Community resurser