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: , 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 z Dataset.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



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow