apache-spark
Comment poser la question liée à Apache Spark?
Recherche…
Introduction
L'objectif de cette rubrique est de documenter les meilleures pratiques lorsque vous posez des questions sur Apache Spark.
Détails de l'environnement:
Lorsque vous posez des questions sur Apache Spark, veuillez inclure les informations suivantes.
- Version Apache Spark utilisée par le client et déploiement Spark, le cas échéant. Pour les questions liées à l'API, les questions majeures (1.6, 2.0, 2.1, etc.) sont généralement suffisantes, car les questions concernant d'éventuels bogues utilisent toujours des informations complètes sur la version.
- Version Scala utilisée pour construire des binaires Spark.
- Version JDK (version
java -version
). - Si vous utilisez le langage invité (Python, R), veuillez fournir des informations sur la version linguistique. Dans Python, utilisez des balises: python-2.x , python-3.x ou des balises plus spécifiques pour distinguer les variantes de langage.
- Créez la définition (
build.sbt
,pom.xml
), le cas échéant, ou les versions de dépendance externes (Python, R), le cas échéant. - Gestionnaire de cluster (
local[n]
, Spark autonome, Yarn, Mesos), mode (client
,cluster
) et autres options d'envoi, le cas échéant.
Exemple de données et code
Exemple de données
Essayez de fournir un exemple minimal de données d'entrée dans un format directement utilisable par les réponses, sans analyse fastidieuse et longue, par exemple un fichier d'entrée ou une collection locale avec tout le code requis pour créer des structures de données distribuées.
Le cas échéant, incluez toujours des informations sur le type:
- Dans les API basées sur RDD, utilisez les annotations de type si nécessaire.
- Dans l'API basée sur DataFrame, fournissez des informations de schéma sous la forme d'un
StrucType
ou d'une sortie deDataset.printSchema
.
La sortie de Dataset.show
ou print
peut avoir un bon aspect mais ne nous dit rien sur les types sous-jacents.
Si un problème particulier se produit uniquement à l’échelle, utilisez des générateurs de données aléatoires (Spark fournit des utilitaires utiles dans org.apache.spark.mllib.random.RandomRDDs
et org.apache.spark.graphx.util.GraphGenerators
Code
Veuillez utiliser des annotations de type lorsque cela est possible. Bien que votre compilateur puisse facilement suivre les types, il n’est pas si facile pour les simples mortels. Par exemple:
val lines: RDD[String] = rdd.map(someFunction)
ou
def f(x: String): Int = ???
sont meilleurs que:
val lines = rdd.map(someFunction)
et
def f(x: String) = ???
respectivement.
Informations de diagnostic
Questions de débogage
Lorsque la question est liée au débogage d'une exception spécifique, fournissez toujours une trace appropriée. Bien qu'il soit conseillé de supprimer les sorties en double (provenant de différents exécuteurs ou tentatives), ne coupez pas les traces vers une seule ligne ou une seule classe d'exception.
Questions de performance
En fonction du contexte, essayez de fournir des détails tels que:
-
RDD.debugString
/Dataset.explain
. - Sortie de l'interface utilisateur Spark avec diagramme DAG si applicable dans un cas particulier.
- Messages de journal pertinents.
- Informations de diagnostic collectées par des outils externes (Ganglia, VisualVM).
Avant de demander
- Recherche Stack Overflow pour les questions en double. Il existe une classe commune de problèmes qui ont déjà été largement documentés.
- Lire Comment puis-je poser une bonne question? .
- Lire Quels sujets puis-je poser ici?
- Ressources communautaires Apache Spark