apache-spark
Jak zadać pytanie związane z Apache Spark?
Szukaj…
Wprowadzenie
Celem tego tematu jest udokumentowanie najlepszych praktyk w zadawaniu pytań związanych z Apache Spark.
Szczegóły dotyczące środowiska:
Podczas zadawania pytań związanych z Apache Spark prosimy o podanie następujących informacji
- Wersja Apache Spark używana przez klienta i wdrożenie Spark, jeśli dotyczy. W przypadku pytań związanych z interfejsem API zwykle wystarczające są informacje podstawowe (1.6, 2.0, 2.1 itd.), W przypadku pytań dotyczących możliwych błędów należy zawsze używać pełnej informacji o wersji.
- Wersja Scala używana do budowy plików binarnych Spark.
- Wersja JDK (wersja
java -version
). - Jeśli używasz języka gościa (Python, R), podaj informacje o wersji językowej. W Pythonie używaj tagów: python-2.x , python-3.x lub bardziej specyficznych, aby rozróżnić warianty językowe.
- Kompilacja definicji (
build.sbt
,pom.xml
), jeśli dotyczy, lub wersje zależności zewnętrznych (Python, R), jeśli dotyczy. - Menedżer klastrów (
local[n]
, samodzielny Spark, Przędza, Mesos), tryb (client
,cluster
) i inne opcje przesyłania, jeśli dotyczy.
Przykładowe dane i kod
Przykładowe dane
Spróbuj podać minimalną liczbę przykładowych danych wejściowych w formacie, który może być bezpośrednio wykorzystany przez odpowiedzi bez żmudnego i czasochłonnego analizowania, na przykład pliku wejściowego lub kolekcji lokalnej, z całym kodem wymaganym do utworzenia rozproszonych struktur danych.
W stosownych przypadkach zawsze dołącz informacje o typie:
- W interfejsie API opartym na RDD w razie potrzeby użyj adnotacji typu.
- W interfejsie API opartym na DataFrame podaj informacje o schemacie jako
StrucType
lub dane wyjściowe zDataset.printSchema
.
Dane wyjściowe z Dataset.show
lub print
mogą wyglądać dobrze, ale nie mówią nam nic o typach bazowych.
Jeśli szczególny problem występuje tylko w skali, użyj losowych generatorów danych (Spark zapewnia przydatne narzędzia w org.apache.spark.mllib.random.RandomRDDs
i org.apache.spark.graphx.util.GraphGenerators
Kod
Jeśli to możliwe, użyj adnotacji typu. Podczas gdy twój kompilator może łatwo śledzić typy, nie jest to tak proste dla zwykłych śmiertelników. Na przykład:
val lines: RDD[String] = rdd.map(someFunction)
lub
def f(x: String): Int = ???
są lepsze niż:
val lines = rdd.map(someFunction)
i
def f(x: String) = ???
odpowiednio.
Informacje diagnostyczne
Debugowanie pytań
Gdy pytanie dotyczy konkretnego wyjątku debugowania, zawsze należy podać odpowiednie śledzenie. Chociaż wskazane jest usuwanie zduplikowanych danych wyjściowych (z różnych programów wykonawczych lub prób), nie należy przycinać śledzenia do pojedynczej linii lub klasy wyjątków.
Pytania dotyczące wydajności.
W zależności od kontekstu spróbuj podać szczegółowe informacje, takie jak:
-
RDD.debugString
/Dataset.explain
. - Dane wyjściowe z interfejsu Spark z interfejsem DAG, jeśli ma to zastosowanie w konkretnym przypadku.
- Odpowiednie komunikaty dziennika.
- Informacje diagnostyczne gromadzone przez narzędzia zewnętrzne (Ganglia, VisualVM).
Zanim zapytasz
- Przeszukaj stos przepełnienia dla duplikatów pytań. Istnieje wspólna klasa problemów, które zostały już szeroko udokumentowane.
- Przeczytaj Jak zadać dobre pytanie? .
- Przeczytaj Jakie tematy mogę tutaj zapytać?
- Zasoby społeczności Apache Spark